/*
 *   Copyright (C) @2021 Webank Group Holding Limited
 *   <p>
 *   Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 *  in compliance with the License. You may obtain a copy of the License at
 *  <p>
 *  http://www.apache.org/licenses/LICENSE-2.0
 *   <p>
 *   Unless required by applicable law or agreed to in writing, software distributed under the License
 *   is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 *  or implied. See the License for the specific language governing permissions and limitations under
 *  he License.
 *
 */

package com.webank.openledger.contracts.gov_auth;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.fisco.bcos.sdk.abi.FunctionEncoder;
import org.fisco.bcos.sdk.abi.FunctionReturnDecoder;
import org.fisco.bcos.sdk.abi.TypeReference;
import org.fisco.bcos.sdk.abi.datatypes.Address;
import org.fisco.bcos.sdk.abi.datatypes.Bool;
import org.fisco.bcos.sdk.abi.datatypes.DynamicArray;
import org.fisco.bcos.sdk.abi.datatypes.Event;
import org.fisco.bcos.sdk.abi.datatypes.Function;
import org.fisco.bcos.sdk.abi.datatypes.Type;
import org.fisco.bcos.sdk.abi.datatypes.Utf8String;
import org.fisco.bcos.sdk.abi.datatypes.generated.Uint16;
import org.fisco.bcos.sdk.abi.datatypes.generated.Uint256;
import org.fisco.bcos.sdk.abi.datatypes.generated.Uint8;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple1;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple2;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple3;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple7;
import org.fisco.bcos.sdk.client.Client;
import org.fisco.bcos.sdk.contract.Contract;
import org.fisco.bcos.sdk.crypto.CryptoSuite;
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.eventsub.EventCallback;
import org.fisco.bcos.sdk.model.CryptoType;
import org.fisco.bcos.sdk.model.TransactionReceipt;
import org.fisco.bcos.sdk.model.callback.TransactionCallback;
import org.fisco.bcos.sdk.transaction.model.exception.ContractException;

@SuppressWarnings("unchecked")
public class AuthManager extends Contract {
    public static final String[] BINARY_ARRAY = {"60806040523480156200001157600080fd5b506040516200d91a3803806200d91a83398101806040528101908080519060200190929190805182019291906020018051820192919060200180519060200190929190505050606460018190555062000069620004a6565b604051809103906000f08015801562000086573d6000803e3d6000fd5b50600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd6d5234051966a63c01d2f905f4d6a60242a27a434cc31f991c190d273b269bb30604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a28360138190555060016013541415620001955762000194620001cd64010000000002620099c9176401000000009004565b5b60026013541415620001c357620001c28383836200020f6401000000000262009a0b176401000000009004565b5b5050505062000671565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f22d9bc58484846040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001806020018461ffff1661ffff168152602001838103835286818151815260200191508051906020019060200280838360005b83811015620002d2578082015181840152602081019050620002b5565b50505050905001838103825285818151815260200191508051906020019060200280838360005b8381101562000316578082015181840152602081019050620002f9565b5050505090500195505050505050602060405180830381600087803b1580156200033f57600080fd5b505af115801562000354573d6000803e3d6000fd5b505050506040513d60208110156200036b57600080fd5b810190808051906020019092919050505050826005908051906020019062000395929190620004b7565b508160069080519060200190620003ae92919062000546565b5080600760006101000a81548161ffff021916908361ffff1602179055507f0c27cf921fb08e618d545975960b46fc31890400829313864b4982cc0033ee2d8383836040518080602001806020018461ffff1661ffff168152602001838103835286818151815260200191508051906020019060200280838360005b83811015620004475780820151818401526020810190506200042a565b50505050905001838103825285818151815260200191508051906020019060200280838360005b838110156200048b5780820151818401526020810190506200046e565b505050509050019550505050505060405180910390a1505050565b604051611430806200c4ea83390190565b82805482825590600052602060002090810192821562000533579160200282015b82811115620005325782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620004d8565b5b509050620005429190620005f7565b5090565b82805482825590600052602060002090600f01601090048101928215620005e45791602002820160005b83821115620005b257835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030262000570565b8015620005e25782816101000a81549061ffff0219169055600201602081600101049283019260010302620005b2565b505b509050620005f391906200063d565b5090565b6200063a91905b808211156200063657600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101620005fe565b5090565b90565b6200066e91905b808211156200066a57600081816101000a81549061ffff02191690555060010162000644565b5090565b90565b61be6980620006816000396000f300608060405260043610610288576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306b586231461028d57806309bfe16c146102d05780630b81604514610313578063116d09ee146103f25780631d0138d7146104095780631f188efb146105385780632215c0e6146105fb57806331bf4a381461072a57806332b8145f1461076d578063397bc52a146107b05780633d829b69146108975780633dca6f2a146108ee5780633f8b0930146109bd57806345f50894146109ed57806349dee2c714610a305780634b39817f14610aff578063502a5c7f14610b9c578063522d0fbc14610c0857806364e5e75b14610c915780636ad1c86d14610d545780636e9960c314610d6b5780637625f2cb14610dc2578063768de3bb14610df1578063784210b614610e7a5780637b590c0b14610f6f578063857c536514610f8657806390bd6a9514610fb157806393c4105014610fc8578063943acab714610fdf578063a740e58d146110a2578063a7ea3ab6146110d2578063ab6c173d14611173578063abef281e146111b6578063ac6c525114611247578063b1675e4f146112b5578063b3a26939146112cc578063b3eb9b5114611370578063b681590e146113f9578063b6db75a01461143c578063ba5b17841461146b578063bc558e871461153a578063bcaaaf80146115b4578063c1e4e0911461162a578063c715c89d146116d3578063ccf7e60d14611716578063d428cffc1461172d578063d77652f714611784578063d8835cfe14611866578063f043f9ff1461195b578063f1db4c5c14611a2a578063f4d3b69314611ab3578063f7dbc51214611af6578063f86afe8414611b62578063fa05dd5714611bd8575b600080fd5b34801561029957600080fd5b506102ce600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c09565b005b3480156102dc57600080fd5b50610311600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d49565b005b34801561031f57600080fd5b5061033e60048036038101908080359060200190929190505050611ee5565b604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018661ffff1661ffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018461ffff1661ffff1681526020018360ff1660ff1681526020018260ff1660ff16815260200197505050505050505060405180910390f35b3480156103fe57600080fd5b5061040761201c565b005b34801561041557600080fd5b5061041e61229e565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015610494578082015181840152602081019050610479565b50505050905090810190601f1680156104c15780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156104fa5780820151818401526020810190506104df565b50505050905090810190601f1680156105275780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b34801561054457600080fd5b5061054d612489565b6040518080602001806020018461ffff1661ffff168152602001838103835286818151815260200191508051906020019060200280838360005b838110156105a2578082015181840152602081019050610587565b50505050905001838103825285818151815260200191508051906020019060200280838360005b838110156105e45780820151818401526020810190506105c9565b505050509050019550505050505060405180910390f35b34801561060757600080fd5b506106106125b0565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561068657808201518184015260208101905061066b565b50505050905090810190601f1680156106b35780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156106ec5780820151818401526020810190506106d1565b50505050905090810190601f1680156107195780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b34801561073657600080fd5b5061076b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061279b565b005b34801561077957600080fd5b506107ae600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612944565b005b3480156107bc57600080fd5b5061087d600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612c9c565b604051808215151515815260200191505060405180910390f35b3480156108a357600080fd5b506108ac612e11565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108fa57600080fd5b506109bb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192908035906020019082018035906020019080","80601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612e37565b005b3480156109c957600080fd5b506109eb600480360381019080803560ff169060200190929190505050612f0b565b005b3480156109f957600080fd5b50610a2e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f93565b005b348015610a3c57600080fd5b50610afd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613194565b005b348015610b0b57600080fd5b50610b146134fe565b60405180806020018360ff1660ff168152602001828103825284818151815260200191508051906020019080838360005b83811015610b60578082015181840152602081019050610b45565b50505050905090810190601f168015610b8d5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b348015610ba857600080fd5b50610bb1613634565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610bf4578082015181840152602081019050610bd9565b505050509050019250505060405180910390f35b348015610c1457600080fd5b50610c8f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613645565b005b348015610c9d57600080fd5b50610ca661392a565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610d18578082015181840152602081019050610cfd565b50505050905090810190601f168015610d455780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b348015610d6057600080fd5b50610d69613a73565b005b348015610d7757600080fd5b50610d80613c5a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610dce57600080fd5b50610dd7613c83565b604051808215151515815260200191505060405180910390f35b348015610dfd57600080fd5b50610e78600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613d9c565b005b348015610e8657600080fd5b50610ebb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614081565b604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018661ffff1661ffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018461ffff1661ffff1681526020018360ff1660ff1681526020018260ff1660ff16815260200197505050505050505060405180910390f35b348015610f7b57600080fd5b50610f8461416a565b005b348015610f9257600080fd5b50610f9b6143c9565b6040518082815260200191505060405180910390f35b348015610fbd57600080fd5b50610fc66143d3565b005b348015610fd457600080fd5b50610fdd6145a7565b005b348015610feb57600080fd5b50610ff4614950565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561106657808201518184015260208101905061104b565b50505050905090810190601f1680156110935780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b3480156110ae57600080fd5b506110d0600480360381019080803560ff169060200190929190505050614a99565b005b3480156110de57600080fd5b50611159600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614b21565b604051808215151515815260200191505060405180910390f35b34801561117f57600080fd5b506111b4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614be4565b005b3480156111c257600080fd5b5061121d600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050614e8f565b604051808460ff1660ff168152602001838152602001828152602001935050505060405180910390f35b34801561125357600080fd5b50611288600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614f2c565b604051808361ffff1661ffff1681526020018261ffff1661ffff1681526020019250505060405180910390f35b3480156112c157600080fd5b506112ca615039565b005b3480156112d857600080fd5b50611356600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050615220565b604051808215151515815260200191505060405180910390f35b34801561137c57600080fd5b506113f7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506153f5565b005b34801561140557600080fd5b5061143a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506154c7565b005b34801561144857600080fd5b5061145161564f565b604051808215151515815260200191505060405180910390f35b34801561147757600080fd5b50611538600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506156a6565b005b34801561154657600080fd5b506115656004803603810190808035906020019092919050505061577a565b604051808360ff1660ff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b3480156115c057600080fd5b50611628600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803560ff169060200190929190505050615867565b005b34801561163657600080fd5b506116d16004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050615939565b005b3480156116df57600080fd5b50611714600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050615be5565b005b34801561172257600080fd5b5061172b615d7d565b005b34801561173957600080fd5b50611742615fff565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561179057600080fd5b506117b2600480360381019080803560ff169060200190929190505050616029565b604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018661ffff1661ffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018461ffff1661ffff1681526020018360ff1660ff1681526020018260ff1660ff16815260200197505050505050505060405180910390f35b34801561187257600080fd5b506118a7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050616097565b604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018661ffff1661ffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018461ffff1661ffff1681526020018360ff1660ff1681526020018260ff1660ff16815260200197505050505050505060405180910390f35b34801561196757600080fd5b50611a28600480360381019080803573ffffffffffffff","ffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050616180565b005b348015611a3657600080fd5b50611ab1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506164ea565b005b348015611abf57600080fd5b50611af4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506165bc565b005b348015611b0257600080fd5b50611b0b616750565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015611b4e578082015181840152602081019050611b33565b505050509050019250505060405180910390f35b348015611b6e57600080fd5b50611bd6600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803560ff169060200190929190505050616761565b005b348015611be457600080fd5b50611c07600480360381019080803561ffff1690602001909291905050506169fa565b005b6000611c13613c83565b1515611c87576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111515611cd857600080fd5b611ce181616c12565b507f82c2f0d91d22bfb8e26f4299be0e648fdb4b0423222f01c3ae22246448f4800d82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b600080611d54613c83565b1515611dc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b6000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141515611e1657600080fd5b611e22600b6000616f34565b9150915080600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e75600c84616f64565b7fd4f08b86ca8b49e744dd07c80d43eba92b8add28d15bf6ad2f930a22bd3f02298382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1505050565b600080600080600080600080600360008a815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663f28676f46040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160e060405180830381600087803b158015611f8b57600080fd5b505af1158015611f9f573d6000803e3d6000fd5b505050506040513d60e0811015611fb557600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050975097509750975097509750975050919395979092949650565b612024613c83565b1515612098576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60076000600460008360ff1660ff16815260200190815260200160002054141515156120c357600080fd5b6120e5600460008360ff1660ff16815260200190815260200160002054617177565b15156120f057600080fd5b612251601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601d8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121ac5780601f10612181576101008083540402835291602001916121ac565b820191906000526020600020905b81548152906001019060200180831161218f57829003601f168201915b5050505050601e8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122475780601f1061221c57610100808354040283529160200191612247565b820191906000526020600020905b81548152906001019060200180831161222a57829003601f168201915b505050505061737f565b612273600460008360ff1660ff168152602001908152602001600020546178a8565b151561227e57600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b60006060806122ab613c83565b151561231f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601d601e818054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123db5780601f106123b0576101008083540402835291602001916123db565b820191906000526020600020905b8154815290600101906020018083116123be57829003601f168201915b50505050509150808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124775780601f1061244c57610100808354040283529160200191612477565b820191906000526020600020905b81548152906001019060200180831161245a57829003601f168201915b50505050509050925092509250909192565b606080600060056006600760009054906101000a900461ffff168280548060200260200160405190810160405280929190818152602001828054801561252457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116124da575b505050505092508180548060200260200160405190810160405280929190818152602001828054801561259e57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116125655790505b50505050509150925092509250909192565b60006060806125bd613c83565b1515612631576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660186019818054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156126ed5780601f106126c2576101008083540402835291602001916126ed565b820191906000526020600020905b8154815290600101906020018083116126d057829003601f168201915b50505050509150808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127895780601f1061275e57610100808354040283529160200191612789565b820191906000526020600020905b81548152906001019060200180831161276c57829003601f168201915b50505050509050925092509250909192565b60006127a5613c83565b1515612819576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115156128d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6163636f756e74206e6f742070656e64696e670000000000000000000000000081525060200191505060405180910390fd5b6128dc81616c12565b507fff56a9fd183513422e403a8f1fa839cbf88bec53a3a2e4220758bc1a5ee22bbd82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b60008061294f613c83565b15156129c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401","8080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150600082111515612a1457600080fd5b612a1e8284617a92565b612a29600f84617c4b565b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002050600090505b600580549050811015612c34578273ffffffffffffffffffffffffffffffffffffffff16600582815481101515612aa157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c27576005600160058054905003815481101515612aff57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600582815481101515612b3957fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506006600160068054905003815481101515612b9857fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff16600682815481101515612bcb57fe5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff1602179055506005805480919060019003612c0f9190619644565b506006805480919060019003612c259190619670565b505b8080600101915050612a6e565b7fc57d505fc7b7af32e8113bebe7f23b591534218bde0b00c48189eab87629bef383604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b60006011846040518082805190602001908083835b602083101515612cd65780518252602082019150602081019050602083039250612cb1565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060040160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836040518082805190602001908083835b602083101515612d815780518252602082019150602081019050602083039250612d5c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1690509392505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612efb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b612f0683838361737f565b505050565b612f13613c83565b1515612f87576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b612f9081617e8d565b50565b6000612f9d613c83565b1515613011576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115156130cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6163636f756e74206e6f742070656e64696e670000000000000000000000000081525060200191505060405180910390fd5b6130d4816178a8565b15156130df57600080fd5b6130ea600c83617c4b565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090557f47a2f9e0452e8f312a3cdc6795d16c324a810d1feffbc30c7c3b40d95fee207d82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b61319c613c83565b1515613210576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60076000806000600460008560ff1660ff168152602001908152602001600020541415156132a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b6132b08333616f34565b9150915060008111151561332c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff1681526020019081526020016000208190555085601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084601d90805190602001906133a19291906196aa565b5083601e90805190602001906133b89291906196aa565b507f4cd07ab46f28195edb83c2f1cba6fbc3c8115e38fec7024e50aa5c9f25c83380868686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015613453578082015181840152602081019050613438565b50505050905090810190601f1680156134805780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156134b957808201518184015260208101905061349e565b50505050905090810190601f1680156134e65780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505050505050565b6060600061350a613c83565b151561357e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b6014601560009054906101000a900460ff16818054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156136255780601f106135fa57610100808354040283529160200191613625565b820191906000526020600020905b81548152906001019060200180831161360857829003601f168201915b50505050509150915091509091565b6060613640600f617f40565b905090565b61364d613c83565b15156136c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60066000806000600460008560ff1660ff16815260200190815260200160002054141515613757576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b6137618333616f34565b915091506000811115156137dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff1681526020019081526020016000208190555084601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601b90805190602001906138529291906196aa565b507f213deb73372a11fd3bafce3da5bba8fe2586c11000b2ea9650f630a643aa4c1d8585604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156138e85780820151818401526020810190506138cd565b50505050905090810190601f1680156139155780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050505050565b60006060613936613c83565b15156139aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f75206172","65206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166016808054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613a645780601f10613a3957610100808354040283529160200191613a64565b820191906000526020600020905b815481529060010190602001808311613a4757829003601f168201915b50505050509050915091509091565b613a7b613c83565b1515613aef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60066000600460008360ff1660ff1681526020019081526020016000205414151515613b1a57600080fd5b613b3c600460008360ff1660ff16815260200190815260200160002054617177565b1515613b4757600080fd5b613c0d601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601b8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613c035780601f10613bd857610100808354040283529160200191613c03565b820191906000526020600020905b815481529060010190602001808311613be657829003601f168201915b505050505061802b565b613c2f600460008360ff1660ff168152602001908152602001600020546178a8565b1515613c3a57600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ac6c5251336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b158015613d4457600080fd5b505af1158015613d58573d6000803e3d6000fd5b505050506040513d6040811015613d6e57600080fd5b8101908080519060200190929190805190602001909291905050509150915060008261ffff16119250505090565b613da4613c83565b1515613e18576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60046000806000600460008560ff1660ff16815260200190815260200160002054141515613eae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b613eb88333616f34565b91509150600081111515613f34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff1681526020019081526020016000208190555084601560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360169080519060200190613fa99291906196aa565b507f96f8160809f811b00413e726fc32482b3b267786da2a9282a72961a89e6061308585604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561403f578082015181840152602081019050614024565b50505050905090810190601f16801561406c5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050505050565b600080600080600080600080600e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111515614147576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6163636f756e74206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b61415081611ee5565b975097509750975097509750975050919395979092949650565b614172613c83565b15156141e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60016000600460008360ff1660ff168152602001908152602001600020541415151561421157600080fd5b614233600460008360ff1660ff16815260200190815260200160002054617177565b151561423e57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663793e6410600760029054906101000a900461ffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808261ffff1661ffff168152602001915050602060405180830381600087803b1580156142e757600080fd5b505af11580156142fb573d6000803e3d6000fd5b505050506040513d602081101561431157600080fd5b810190808051906020019092919050505050600760029054906101000a900461ffff16600760006101000a81548161ffff021916908361ffff1602179055507f66b2f7272f730d49f4ff536261c2af5b2e3f63570991a420e8ebc3d5da5aeb7c60405160405180910390a161439e600460008360ff1660ff168152602001908152602001600020546178a8565b15156143a957600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b6000601354905090565b6143db613c83565b151561444f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60036000600460008360ff1660ff168152602001908152602001600020541415151561447a57600080fd5b61449c600460008360ff1660ff16815260200190815260200160002054617177565b15156144a757600080fd5b61455a60148054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156145405780601f1061451557610100808354040283529160200191614540565b820191906000526020600020905b81548152906001019060200180831161452357829003601f168201915b5050505050601560009054906101000a900460ff166183d7565b61457c600460008360ff1660ff168152602001908152602001600020546178a8565b151561458757600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b6145af613c83565b1515614623576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60026000600460008360ff1660ff168152602001908152602001600020541415151561464e57600080fd5b614670600460008360ff1660ff16815260200190815260200160002054617177565b151561467b57600080fd5b61468361972a565b604051809103906000f08015801561469f573d6000803e3d6000fd5b50600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f22d9bc56009600a600760009054906101000a900461ffff166040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001806020018461ffff1661ffff16815260200183810383528681815481526020019150805480156147eb57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116147a1575b5050838103825285818154815260200191508054801561485257602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116148195790505b505095505050505050602060405180830381600087803b15801561487557600080fd5b505af1158015614889573d6000803e3d6000fd5b505050506040513d602081101561489f57600080fd5b810190808051906020019092919050505050600960059080546148c392919061973a565b50600a60069080546148d692919061978c565b507fa9c140686858bb7355044264151d848504861a91a2f7659ee950ee11e86dec0d60405160405180910390a1614925600460008360ff1660ff168152602001908152602001600020546178a8565b151561493057600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b6000606061495c613c83565b15156149d0576040517f08c379a00000000000000000000000000000000000000000","000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601b808054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015614a8a5780601f10614a5f57610100808354040283529160200191614a8a565b820191906000526020600020905b815481529060010190602001808311614a6d57829003601f168201915b50505050509050915091509091565b614aa1613c83565b1515614b15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b614b1e81618656565b50565b60006011836040518082805190602001908083835b602083101515614b5b5780518252602082019150602081019050602083039250614b36565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000614bee613c83565b1515614c62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111515614d1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6163636f756e74206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b614d2681836186df565b614d31600c83617c4b565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905560058290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060066001908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff160217905550507f238498021d519fc2d1325fb79524857f9a5c00286a5e71c1541a43561fec98d682604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b6000806000806011856040518082805190602001908083835b602083101515614ecd5780518252602082019150602081019050602083039250614ea8565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902090508060000160009054906101000a900460ff1681600101548260020154935093509350509193909250565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ac6c5251846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b158015614feb57600080fd5b505af1158015614fff573d6000803e3d6000fd5b505050506040513d604081101561501557600080fd5b81019080805190602001909291908051906020019092919050505091509150915091565b615041613c83565b15156150b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60046000600460008360ff1660ff16815260200190815260200160002054141515156150e057600080fd5b615102600460008360ff1660ff16815260200190815260200160002054617177565b151561510d57600080fd5b6151d3601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660168054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156151c95780601f1061519e576101008083540402835291602001916151c9565b820191906000526020600020905b8154815290600101906020018083116151ac57829003601f168201915b5050505050618898565b6151f5600460008360ff1660ff168152602001908152602001600020546178a8565b151561520057600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b6000806000806000601260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000887bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020935060118460405180828054600181600116156101000203166002900480156153165780601f106152f4576101008083540402835291820191615316565b820191906000526020600020905b815481529060010190602001808311615302575b50509150509081526020016040518091039020925060008360000160009054906101000a900460ff1660ff16141561535157600094506153ea565b8260000160009054906101000a900460ff169150600360ff168260ff16141561537d57600194506153ea565b8260030160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600160ff168260ff1614156153e5578094506153ea565b801594505b505050509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156154b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b6154c3828261802b565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561558d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f81c40df530c7b3f6fe84403f586f41d461f96342dacbcd44ac6f0eb80f88970460405160405180910390a35050565b60003373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561576a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b615775838383618cd3565b505050565b60008060006003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16636900187d6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016040805180830381600087803b15801561581857600080fd5b505af115801561582c573d6000803e3d6000fd5b505050506040513d604081101561584257600080fd5b8101908080519060200190929190805190602001909291905050509250925050915091565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561592b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b61593582826183d7565b5050565b615941613c83565b15156159b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152","602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60026000806000600460008560ff1660ff16815260200190815260200160002054141515615a4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b615a558333616f34565b91509150600081111515615ad1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff168152602001908152602001600020819055508460099080519060200190615b059291906197ec565b5083600a9080519060200190615b1c929190619876565b507fb1a0082653767af00d5a7f1d965bdbf8b8ad98fd31f08c7bfe4c37ff3ca4c3db8585604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015615b87578082015181840152602081019050615b6c565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015615bc9578082015181840152602081019050615bae565b5050505090500194505050505060405180910390a15050505050565b6000615bef613c83565b1515615c63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111515615cb457600080fd5b615cbd816178a8565b1515615cc857600080fd5b615cd3600f83617c4b565b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090557fd14f0423caf2115c9e3c41af1f60605c54594f1b5efaf7a3f6b2a7c48cb0841b82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b615d85613c83565b1515615df9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60056000600460008360ff1660ff1681526020019081526020016000205414151515615e2457600080fd5b615e46600460008360ff1660ff16815260200190815260200160002054617177565b1515615e5157600080fd5b615fb2601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660188054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015615f0d5780601f10615ee257610100808354040283529160200191615f0d565b820191906000526020600020905b815481529060010190602001808311615ef057829003601f168201915b505050505060198054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015615fa85780601f10615f7d57610100808354040283529160200191615fa8565b820191906000526020600020905b815481529060010190602001808311615f8b57829003601f168201915b5050505050618cd3565b615fd4600460008360ff1660ff168152602001908152602001600020546178a8565b1515615fdf57600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600080600080600080600460008a60ff1660ff168152602001908152602001600020541415151561605c57600080fd5b61607e600460008a60ff1660ff16815260200190815260200160002054611ee5565b9650965096509650965096509650919395979092949650565b600080600080600080600080600b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111151561615d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6163636f756e74206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b61616681611ee5565b975097509750975097509750975050919395979092949650565b616188613c83565b15156161fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60056000806000600460008560ff1660ff16815260200190815260200160002054141515616292576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b61629c8333616f34565b91509150600081111515616318576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff1681526020019081526020016000208190555085601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550846018908051906020019061638d9291906196aa565b5083601990805190602001906163a49291906196aa565b507fd0aaaab8a852d02282f274fca46859a93629651d277f7070e6766f93a82aee39868686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561643f578082015181840152602081019050616424565b50505050905090810190601f16801561646c5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156164a557808201518184015260208101905061648a565b50505050905090810190601f1680156164d25780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156165ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b6165b88282618898565b5050565b6000806165c7613c83565b151561663b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414151561668957600080fd5b616695600c6000616f34565b9150915080600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506166e8600f84616f64565b7fbe8e2e41ba1065826815fcb05959316e6e6ba9b3b447de9d59c436620b0c57ad83604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b606061675c600c617f40565b905090565b616769613c83565b15156167dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60036000806000600460008560ff1660ff16815260200190815260200160002054141515616873576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b61687d8333616f34565b915091506000811115156168f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff16815260200190815260200160002081905550846014908051906020019061692d9291906196aa565b5083601560006101000a81548160ff021916908360ff1602179055507f357b9926c35739dbd0784f173b325b56d856a8560b4a82b0c2855e2a6303d86a858560405180806020018360ff1660ff16815260","2001828103825284818151815260200191508051906020019080838360005b838110156169b857808201518184015260208101905061699d565b50505050905090810190601f1680156169e55780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050505050565b616a02613c83565b1515616a76576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60016000806000600460008560ff1660ff16815260200190815260200160002054141515616b0c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b616b168333616f34565b91509150600081111515616b92576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff1681526020019081526020016000208190555083600760026101000a81548161ffff021916908361ffff1602179055507fbf78b5f34aec236b9208ca42f92bd676165c68355cef1758e905daf75cce13aa84604051808261ffff1661ffff16815260200191505060405180910390a150505050565b600080600080600080600080339650600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ac6c5251886040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b158015616cdd57600080fd5b505af1158015616cf1573d6000803e3d6000fd5b505050506040513d6040811015616d0757600080fd5b81019080805190602001909291908051906020019092919050505095509550600193506000925060008661ffff161415616d445760009350616e9e565b600360008a815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915060008273ffffffffffffffffffffffffffffffffffffffff161415616da25760009350616e9d565b8190508073ffffffffffffffffffffffffffffffffffffffff1663e560ca4388886040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1661ffff168152602001925050506040805180830381600087803b158015616e4f57600080fd5b505af1158015616e63573d6000803e3d6000fd5b505050506040513d6040811015616e7957600080fd5b81019080805190602001909291908051906020019092919050505080945081955050505b5b8673ffffffffffffffffffffffffffffffffffffffff16897febe4dc679cdbfe16b4f5276752b8a8394e6eab05e565e44e0815fc8379ad3d37863060405180831515151581526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a383975050505050505050919050565b600080600160008154809291906001019190505550616f566001548585619328565b600154915091509250929050565b60008173ffffffffffffffffffffffffffffffffffffffff1614151515617019576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f4c6962416464726573735365743a2076616c75652063616e277420626520307881526020017f300000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61702382826195f5565b1515156170be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f4c6962416464726573735365743a2076616c756520616c72656164792065786981526020017f73747320696e20746865207365742e000000000000000000000000000000000081525060400191505060405180910390fd5b816001018190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505081600101805490508260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000806000806003600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156171d65760009250617378565b6003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff16638c542ddf856040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15801561727b57600080fd5b505af115801561728f573d6000803e3d6000fd5b505050506040513d60208110156172a557600080fd5b81019080805190602001909291905050509050600115158115151415617374576003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16847f410b46f567eb79383667e25a31d877045f2ac0dbd2315b1f6d85afe9455b89e930604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a35b8092505b5050919050565b6000806011836040518082805190602001908083835b6020831015156173ba5780518252602082019150602081019050602083039250617395565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020915060008260000160009054906101000a900460ff1660ff161415151561747c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f67726f7570206e6f74206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b836040518082805190602001908083835b6020831015156174b2578051825260208201915060208101905060208303925061748d565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090508160040160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1615156175f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f66756e6374696f6e206e6f74206578697374000000000000000000000000000081525060200191505060405180910390fd5b60008260040160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055508160020160008154809291906001900391905055506020604051908101604052806000815250601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002090805190602001906177639291906196aa565b507f99733eb68fd342df4ae81ac2f9d4b1f5fa20fb9f6f2c398224e3a65726b6d78c858585604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156177fe5780820151818401526020810190506177e3565b50505050905090810190601f16801561782b5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015617864578082015181840152602081019050617849565b50505050905090810190601f1680156178915780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a15050505050565b60008060006001915060006003600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561790c5760009150617a21565b6003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16632e49d78b60026040518263ffffffff167c01000000000000000000000000000000000000","00000000000000000000028152600401808260ff168152602001915050600060405180830381600087803b1580156179b557600080fd5b505af11580156179c9573d6000803e3d6000fd5b5050505060006003600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b811515847f93d40816dd86538ee527eee904fe366f1a5377b07417493a74dfb9b163fd80f130604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a38192505050919050565b81617a9c81617177565b1515617b36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f5745476f7665726e616e63653a2076616c69642072657175657374206661696c81526020017f65642e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631400a8138360006040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff16815260200192505050602060405180830381600087803b158015617c0057600080fd5b505af1158015617c14573d6000803e3d6000fd5b505050506040513d6020811015617c2a57600080fd5b810190808051906020019092919050505050617c45816178a8565b50505050565b6000806000617c5a85856195f5565b1515617cf4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f4c6962416464726573735365743a2076616c756520646f65736e27742065786981526020017f73742e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60018560000160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054039250600185600101805490500391508460010182815481101515617d5957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050808560010184815481101515617d9857fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600183018560000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508460000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905584600101805480919060019003617e859190619644565b505050505050565b6000600460008360ff1660ff1681526020019081526020016000205414151515617eb657600080fd5b617ed8600460008360ff1660ff168152602001908152602001600020546178a8565b1515617ee357600080fd5b600460008260ff1660ff168152602001908152602001600020600090557f1e0d9ed048bfdd82052030309dd50f1fc735ed6c9fe537342e3d7e85babbfb5381604051808260ff1660ff16815260200191505060405180910390a150565b60608060008360010180549050604051908082528060200260200182016040528015617f7b5781602001602082028038833980820191505090505b5091505b8360010180549050811015618021578360010181815481101515617f9f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168282815181101515617fd857fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050617f7f565b8192505050919050565b60006011826040518082805190602001908083835b6020831015156180655780518252602082019150602081019050602083039250618040565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561815a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6163636f756e74206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b60006011836040518082805190602001908083835b602083101515618194578051825260208201915060208101905060208303925061816f565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060030160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506011826040518082805190602001908083835b6020831015156182565780518252602082019150602081019050602083039250618231565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206001016000815480929190600190039190505550816040518082805190602001908083835b6020831015156182d357805182526020820191506020810190506020830392506182ae565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090507fbd44fc4687efc501b1a20f4a8e76687997039da8042078761466eec90daac81f8383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561839757808201518184015260208101905061837c565b50505050905090810190601f1680156183c45780820380516001836020036101000a031916815260200191505b50935050505060405180910390a1505050565b606082905060008151141515156183ed57600080fd5b60006011846040518082805190602001908083835b6020831015156184275780518252602082019150602081019050602083039250618402565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900460ff1660ff161415156184e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f67726f757020616c72656164792065786973740000000000000000000000000081525060200191505060405180910390fd5b6060604051908101604052808360ff1681526020016000815260200160008152506011846040518082805190602001908083835b60208310151561853c5780518252602082019150602081019050602083039250618517565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160010155604082015181600201559050507f08a003cf3299c03854125249ddce5f9e09a1fb1edf6b1550e71b6f8043030496838360405180806020018360ff1660ff168152602001828103825284818151815260200191508051906020019080838360005b838110156186165780820151818401526020810190506185fb565b50505050905090810190601f1680156186435780820380516001836020036101000a031916815260200191505b50935050505060405180910390a1505050565b6000600460008360ff1660ff168152602001908152602001600020541415151561867f57600080fd5b6186a1600460008360ff1660ff16815260200190815260200160002054616c12565b15156186ac57600080fd5b8060ff167f2b8c8ac1568d9f802f384796bb60ff3c14f6a7603c0ae9df88903b4cfdb95eef60405160405180910390a250565b816186e981617177565b1515618783576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f5745476f7665726e616e63653a2076616c69642072657175657374206661696c81526020017f65642e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631400a8138360016040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff16815260200192505050602060405180830381600087803b15801561884d57600080fd5b505af1158015618861573d6000803e3d6000fd5b505050506040513d602081101561887757600080fd5b810190808051906020019092919050505050618892816178a8565b50505050565b60006011826040518082805190602001908083835b6020831015156188d257805182526020820191506020810190506020830392506188ad565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900460ff1660ff161415151561898f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f67726f7570206e6f74206578697374000000000000000000000000000000000081","525060200191505060405180910390fd5b6011816040518082805190602001908083835b6020831015156189c757805182526020820191506020810190506020830392506189a2565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515618abd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6163636f756e7420616c7265616479206164640000000000000000000000000081525060200191505060405180910390fd5b60016011826040518082805190602001908083835b602083101515618af75780518252602082019150602081019050602083039250618ad2565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506011816040518082805190602001908083835b602083101515618bb95780518252602082019150602081019050602083039250618b94565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600101600081548092919060010191905055507f1f4e521a7c2a6c34638ef19b691ef76b750a556070ae4b91b925d3122f8727bd8282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015618c94578082015181840152602081019050618c79565b50505050905090810190601f168015618cc15780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b60008060606011846040518082805190602001908083835b602083101515618d105780518252602082019150602081019050602083039250618ceb565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020925060008360000160009054906101000a900460ff1660ff1614151515618dd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f67726f7570206e6f74206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b846040518082805190602001908083835b602083101515618e085780518252602082019150602081019050602083039250618de3565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902091508260040160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16151515618f4a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f66756e6374696f6e20616c72656164792061646400000000000000000000000081525060200191505060405180910390fd5b601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561906c5780601f106190415761010080835404028352916020019161906c565b820191906000526020600020905b81548152906001019060200180831161904f57829003601f168201915b505050505090506000815114151561908357600080fd5b60018360040160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550826002016000815480929190600101919050555083601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002090805190602001906191e29291906196aa565b507f19ec4d1efc16f88df62edeaa6cf89b178f2bed446087fa19ab61f2c3a1d927c9868686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561927d578082015181840152602081019050619262565b50505050905090810190601f1680156192aa5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156192e35780820151818401526020810190506192c8565b50505050905090810190601f1680156193105780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505050505050565b60008060008060006003600089815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156193bf576003600088815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692508293506195eb565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637f3c81606040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561944557600080fd5b505af1158015619459573d6000803e3d6000fd5b505050506040513d602081101561946f57600080fd5b810190808051906020019092919050505091508686868461948e619920565b808581526020018460ff1660ff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1661ffff168152602001945050505050604051809103906000f080158015619503573d6000803e3d6000fd5b509050806003600089815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508473ffffffffffffffffffffffffffffffffffffffff168660ff16887f501994f520a3585d1c71ac106183d6fcb8a825b388c60e3ac9ef7ec1e1c866fc8530604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a48093505b5050509392505050565b6000808360000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415905092915050565b81548183558181111561966b5781836000526020600020918201910161966a9190619930565b5b505050565b8154818355818111156196a557600f016010900481600f016010900483600052602060002091820191016196a49190619930565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106196eb57805160ff1916838001178555619719565b82800160010185558215619719579182015b828111156197185782518255916020019190600101906196fd565b5b5090506197269190619930565b5090565b60405161143080619c9483390190565b82805482825590600052602060002090810192821561977b5760005260206000209182015b8281111561977a57825482559160010191906001019061975f565b5b5090506197889190619955565b5090565b82805482825590600052602060002090600f016010900481019282156197db57600052602060002091600f016010900482015b828111156197da5782548255916001019190600101906197bf565b5b5090506197e89190619998565b5090565b828054828255906000526020600020908101928215619865579160200282015b828111156198645782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061980c565b5b5090506198729190619955565b5090565b82805482825590600052602060002090600f0160109004810192821561990f5791602002820160005b838211156198df57835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030261989f565b801561990d5782816101000a81549061ffff02191690556002016020816001010492830192600103026198df565b505b50905061991c9190619998565b5090565b604051610d7a8061b0c483390190565b61995291905b8082111561994e576000816000905550600101619936565b5090565b90565b61999591905b8082111561999157600081816101000a81549073ffffffffffffffffffffffffffffff","ffffffffff02191690555060010161995b565b5090565b90565b6199c691905b808211156199c257600081816101000a81549061ffff02191690555060010161999e565b5090565b90565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f22d9bc58484846040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001806020018461ffff1661ffff168152602001838103835286818151815260200191508051906020019060200280838360005b83811015619acc578082015181840152602081019050619ab1565b50505050905001838103825285818151815260200191508051906020019060200280838360005b83811015619b0e578082015181840152602081019050619af3565b5050505090500195505050505050602060405180830381600087803b158015619b3657600080fd5b505af1158015619b4a573d6000803e3d6000fd5b505050506040513d6020811015619b6057600080fd5b8101908080519060200190929190505050508260059080519060200190619b889291906197ec565b508160069080519060200190619b9f929190619876565b5080600760006101000a81548161ffff021916908361ffff1602179055507f0c27cf921fb08e618d545975960b46fc31890400829313864b4982cc0033ee2d8383836040518080602001806020018461ffff1661ffff168152602001838103835286818151815260200191508051906020019060200280838360005b83811015619c36578082015181840152602081019050619c1b565b50505050905001838103825285818151815260200191508051906020019060200280838360005b83811015619c78578082015181840152602081019050619c5d565b505050509050019550505050505060405180910390a150505056006080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe9babf7227595470b3626ae5ccf58b60155b302e762cffc79c52bfd8a800c53c60405160405180910390a461136b806100c56000396000f300608060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806313af40351461009e5780631400a813146100e1578063793e64101461014a5780637f3c816014610193578063ac6c5251146101c6578063b2bdfa7b14610234578063d428cffc1461028b578063d58846371461034e578063f22d9bc5146103e8575b600080fd5b3480156100aa57600080fd5b506100df600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104b7565b005b3480156100ed57600080fd5b50610130600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190505050610676565b604051808215151515815260200191505060405180910390f35b34801561015657600080fd5b50610179600480360381019080803561ffff16906020019092919050505061080c565b604051808215151515815260200191505060405180910390f35b34801561019f57600080fd5b506101a861091e565b604051808261ffff1661ffff16815260200191505060405180910390f35b3480156101d257600080fd5b50610207600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610932565b604051808361ffff1661ffff1681526020018261ffff1661ffff1681526020019250505060405180910390f35b34801561024057600080fd5b50610249610963565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561029757600080fd5b506102a0610988565b604051808461ffff1661ffff1681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156102f55780820151818401526020810190506102da565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561033757808201518184015260208101905061031c565b505050509050019550505050505060405180910390f35b34801561035a57600080fd5b506103ce60048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803561ffff169060200190929190803561ffff1690602001909291905050506109be565b604051808215151515815260200191505060405180910390f35b3480156103f457600080fd5b5061049d6004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803561ffff169060200190929190505050610cb2565b604051808215151515815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fe9babf7227595470b3626ae5ccf58b60155b302e762cffc79c52bfd8a800c53c60405160405180910390a450565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610762576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61077883836001610ff89092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167f2c00e0bbfed7415a2cfaabe8c8c0c4e511702b7ede4a3de9ff3e4352ab2b760d8330604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a26001905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600460006101000a81548161ffff021916908361ffff16021790555060019050919050565b600460009054906101000a900461ffff1681565b60008061094983600161119b90919063ffffffff16565b600460009054906101000a900461ffff1691509150915091565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060608060608061099a6001611229565b91509150600460009054906101000a900461ffff1682829450945094505050909192565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610aab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008551111515610b24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f496c6c6567616c2077686f73000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008461ffff16111515610ba0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496c6c6567616c2077656967687421000000000000000000000000000000000081525060200191505060405180910390fd5b82600460006101000a81548161ffff021916908361ffff160217905550600090505b8451811015610ca657610bf88582815181101515610bdc57fe5b90602001906020020151856001610ff89092919063ffffffff16565b8481815181101515610c0657fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff","167f2c00e0bbfed7415a2cfaabe8c8c0c4e511702b7ede4a3de9ff3e4352ab2b760d8530604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a28080600101915050610bc2565b60019150509392505050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008551118015610db1575083518551145b1515610e25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496c6c6567616c2061727261797300000000000000000000000000000000000081525060200191505060405180910390fd5b82600460006101000a81548161ffff021916908361ffff160217905550600090505b8451811015610fec5760008482815181101515610e6057fe5b9060200190602002015161ffff16111515610ee3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496c6c6567616c2077656967687421000000000000000000000000000000000081525060200191505060405180910390fd5b610f278582815181101515610ef457fe5b906020019060200201518583815181101515610f0c57fe5b906020019060200201516001610ff89092919063ffffffff16565b8481815181101515610f3557fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167f2c00e0bbfed7415a2cfaabe8c8c0c4e511702b7ede4a3de9ff3e4352ab2b760d8583815181101515610f8457fe5b9060200190602002015130604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a28080600101915050610e47565b60019150509392505050565b60008360000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081141561115057836001018390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508360020182908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff1602179055505083600101805490508460000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611195565b81846002016001830381548110151561116557fe5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff1602179055505b50505050565b60008060008460000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054915084600201600183038154811015156111f857fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff169050809250505092915050565b6060808260010183600201818054806020026020016040519081016040528092919081815260200182805480156112b557602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161126b575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561132f57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116112f65790505b50505050509050915091509150915600a165627a7a7230582038b6859c32b4e2104f5d843a952fb216d38a51aa1a9acdfed61432f70ddb96430029608060405234801561001057600080fd5b50604051608080610d7a83398101806040528101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe9babf7227595470b3626ae5ccf58b60155b302e762cffc79c52bfd8a800c53c60405160405180910390a48360018190555080600260006101000a81548161ffff021916908361ffff1602179055506000600460006101000a81548161ffff021916908361ffff1602179055506000600460026101000a81548160ff021916908360ff16021790555082600460036101000a81548160ff021916908360ff160217905550816004806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050610bab806101cf6000396000f300608060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806313af40351461009e57806325fee005146100e15780632e49d78b1461013c5780633037b2b01461016c5780636900187d146101c35780638c542ddf14610227578063b2bdfa7b1461026c578063e560ca43146102c3578063f28676f41461033b575b600080fd5b3480156100aa57600080fd5b506100df600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610404565b005b3480156100ed57600080fd5b50610122600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105c3565b604051808215151515815260200191505060405180910390f35b34801561014857600080fd5b5061016a600480360381019080803560ff169060200190929190505050610619565b005b34801561017857600080fd5b50610181610768565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101cf57600080fd5b506101d861078d565b604051808360ff1660ff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b34801561023357600080fd5b50610252600480360381019080803590602001909291905050506107ca565b604051808215151515815260200191505060405180910390f35b34801561027857600080fd5b506102816107ff565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102cf57600080fd5b50610312600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190505050610824565b60405180831515151581526020018261ffff1661ffff1681526020019250505060405180910390f35b34801561034757600080fd5b50610350610af2565b604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018661ffff1661ffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018461ffff1661ffff1681526020018360ff1660ff1681526020018260ff1660ff16815260200197505050505050505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156104ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fe9babf7227595470b3626ae5ccf58b60155b302e762cffc79c52bfd8a800c53c60405160405180910390a450565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e0000000000000000000000000000000000000000","00000000000081525060400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168160ff167fc3208bfd1cf6c6d18dfcf3da08adc1ea4dcb0962c70f55f953cb316b359af5f660405160405180910390a380600460026101000a81548160ff021916908360ff16021790555050565b6004809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600460039054906101000a900460ff166004809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b6000600260009054906101000a900461ffff1661ffff16600460009054906101000a900461ffff1661ffff1610159050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610913576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000151581151514156109fb5783600460009054906101000a900461ffff1601600460006101000a81548161ffff021916908361ffff1602179055506001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610a17565b6000600460009054906101000a900461ffff1692509250610aea565b8361ffff168573ffffffffffffffffffffffffffffffffffffffff167f85ff8897265d8f8340b0d145d58b1d439a4bc446f49d9f137162cb672edd31fe30604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a3600260009054906101000a900461ffff1661ffff16600460009054906101000a900461ffff1661ffff16101515610ad257610ad16001610619565b5b6001600460009054906101000a900461ffff16925092505b509250929050565b60008060008060008060006001546004809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900461ffff1630600460009054906101000a900461ffff16600460039054906101000a900460ff16600460029054906101000a900460ff168393509650965096509650965096509650909192939495965600a165627a7a723058203ab15180a9444d1a867241092d5eef031663c100d0365b3cabd949ca151a390b0029a165627a7a72305820269dd1398c696469dc682d66a480abba8074885c60d6a1b8e944b6afea34021300296080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe9babf7227595470b3626ae5ccf58b60155b302e762cffc79c52bfd8a800c53c60405160405180910390a461136b806100c56000396000f300608060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806313af40351461009e5780631400a813146100e1578063793e64101461014a5780637f3c816014610193578063ac6c5251146101c6578063b2bdfa7b14610234578063d428cffc1461028b578063d58846371461034e578063f22d9bc5146103e8575b600080fd5b3480156100aa57600080fd5b506100df600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104b7565b005b3480156100ed57600080fd5b50610130600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190505050610676565b604051808215151515815260200191505060405180910390f35b34801561015657600080fd5b50610179600480360381019080803561ffff16906020019092919050505061080c565b604051808215151515815260200191505060405180910390f35b34801561019f57600080fd5b506101a861091e565b604051808261ffff1661ffff16815260200191505060405180910390f35b3480156101d257600080fd5b50610207600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610932565b604051808361ffff1661ffff1681526020018261ffff1661ffff1681526020019250505060405180910390f35b34801561024057600080fd5b50610249610963565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561029757600080fd5b506102a0610988565b604051808461ffff1661ffff1681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156102f55780820151818401526020810190506102da565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561033757808201518184015260208101905061031c565b505050509050019550505050505060405180910390f35b34801561035a57600080fd5b506103ce60048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803561ffff169060200190929190803561ffff1690602001909291905050506109be565b604051808215151515815260200191505060405180910390f35b3480156103f457600080fd5b5061049d6004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803561ffff169060200190929190505050610cb2565b604051808215151515815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fe9babf7227595470b3626ae5ccf58b60155b302e762cffc79c52bfd8a800c53c60405160405180910390a450565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610762576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61077883836001610ff89092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167f2c00e0bbfed7415a2cfaabe8c8c0c4e511702b7ede4a3de9ff3e4352ab2b760d8330604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a26001905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600460006101000a81548161ffff021916908361ffff16021790555060019050919050565b600460009054906101000a900461ffff1681565b60008061094983600161119b90919063ffffffff16565b600460009054906101000a900461ffff1691509150915091565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060608060608061099a6001611229565b91509150600460009054906101000a900461ffff1682829450945094505050909192565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610aab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020","01807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008551111515610b24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f496c6c6567616c2077686f73000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008461ffff16111515610ba0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496c6c6567616c2077656967687421000000000000000000000000000000000081525060200191505060405180910390fd5b82600460006101000a81548161ffff021916908361ffff160217905550600090505b8451811015610ca657610bf88582815181101515610bdc57fe5b90602001906020020151856001610ff89092919063ffffffff16565b8481815181101515610c0657fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167f2c00e0bbfed7415a2cfaabe8c8c0c4e511702b7ede4a3de9ff3e4352ab2b760d8530604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a28080600101915050610bc2565b60019150509392505050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008551118015610db1575083518551145b1515610e25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496c6c6567616c2061727261797300000000000000000000000000000000000081525060200191505060405180910390fd5b82600460006101000a81548161ffff021916908361ffff160217905550600090505b8451811015610fec5760008482815181101515610e6057fe5b9060200190602002015161ffff16111515610ee3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496c6c6567616c2077656967687421000000000000000000000000000000000081525060200191505060405180910390fd5b610f278582815181101515610ef457fe5b906020019060200201518583815181101515610f0c57fe5b906020019060200201516001610ff89092919063ffffffff16565b8481815181101515610f3557fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167f2c00e0bbfed7415a2cfaabe8c8c0c4e511702b7ede4a3de9ff3e4352ab2b760d8583815181101515610f8457fe5b9060200190602002015130604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a28080600101915050610e47565b60019150509392505050565b60008360000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081141561115057836001018390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508360020182908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff1602179055505083600101805490508460000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611195565b81846002016001830381548110151561116557fe5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff1602179055505b50505050565b60008060008460000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054915084600201600183038154811015156111f857fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff169050809250505092915050565b6060808260010183600201818054806020026020016040519081016040528092919081815260200182805480156112b557602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161126b575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561132f57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116112f65790505b50505050509050915091509150915600a165627a7a7230582038b6859c32b4e2104f5d843a952fb216d38a51aa1a9acdfed61432f70ddb96430029"};

    public static final String BINARY = String.join("", BINARY_ARRAY);

    public static final String[] SM_BINARY_ARRAY = {"60806040523480156200001157600080fd5b506040516200d9193803806200d91983398101806040528101908080519060200190929190805182019291906020018051820192919060200180519060200190929190505050606460018190555062000069620004a6565b604051809103906000f08015801562000086573d6000803e3d6000fd5b50600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fb77d5ab01b3f7208beac655a12b8bb6cdcfbb1a49eebb865c2e8ccfd7407909430604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a28360138190555060016013541415620001955762000194620001cd64010000000002620099c8176401000000009004565b5b60026013541415620001c357620001c28383836200020f6401000000000262009a0a176401000000009004565b5b5050505062000671565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ea3c170c8484846040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001806020018461ffff1661ffff168152602001838103835286818151815260200191508051906020019060200280838360005b83811015620002d2578082015181840152602081019050620002b5565b50505050905001838103825285818151815260200191508051906020019060200280838360005b8381101562000316578082015181840152602081019050620002f9565b5050505090500195505050505050602060405180830381600087803b1580156200033f57600080fd5b505af115801562000354573d6000803e3d6000fd5b505050506040513d60208110156200036b57600080fd5b810190808051906020019092919050505050826005908051906020019062000395929190620004b7565b508160069080519060200190620003ae92919062000546565b5080600760006101000a81548161ffff021916908361ffff1602179055507fab88aac081194e202f78b52f9630ee711ed21111fd9c301de2d051725ae4cbab8383836040518080602001806020018461ffff1661ffff168152602001838103835286818151815260200191508051906020019060200280838360005b83811015620004475780820151818401526020810190506200042a565b50505050905001838103825285818151815260200191508051906020019060200280838360005b838110156200048b5780820151818401526020810190506200046e565b505050509050019550505050505060405180910390a1505050565b604051611430806200c4e983390190565b82805482825590600052602060002090810192821562000533579160200282015b82811115620005325782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620004d8565b5b509050620005429190620005f7565b5090565b82805482825590600052602060002090600f01601090048101928215620005e45791602002820160005b83821115620005b257835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030262000570565b8015620005e25782816101000a81549061ffff0219169055600201602081600101049283019260010302620005b2565b505b509050620005f391906200063d565b5090565b6200063a91905b808211156200063657600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101620005fe565b5090565b90565b6200066e91905b808211156200066a57600081816101000a81549061ffff02191690555060010162000644565b5090565b90565b61be6880620006816000396000f300608060405260043610610288576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630fa984821461028d57806312444ec41461031657806313c08e3f1461044557806316ae415b14610488578063275d1a7b146104cb57806328e9610c146105375780632bf10aea146105db5780632c0135e4146106aa57806331385259146106ed57806333d9230714610704578063412460f1146107a157806345e74752146107d157806348cef5311461081457806348fc7e04146108d75780634b9f6ef7146109785780634d85cca41461098f57806359d296a714610a205780635ea9106814610a4f5780635f1eaace14610a9257806363510d1a14610b555780636643f4b614610b98578063688ccaba14610c8d5780636a4bfff614610ce45780636bc00d2f14610db357806378416b9114610ee25780637c1a8d9514610f39578063854fd6401461101857806387a2fee41461105b578063881b171c146110b257806394ef5b431461119457806397162b7e146112005780639e1bbc8214611217578063a312dfb414611247578063a3c58317146112d0578063a63cb909146112e7578063a9c93e40146112fe578063aa69cc6e146113cd578063b64f7c3c14611476578063b9fa0678146114f0578063ba5e50e414611579578063c13ca7cf14611590578063c45cd174146115d3578063c77695e414611696578063cd685f4014611704578063d5083cf91461172f578063d93ff63914611824578063db56ab2f14611853578063db9a313614611884578063dd95fdf41461190d578063e296f72414611983578063f261cb2014611a52578063fccbbf5814611a69578063ffa747a814611adf578063ffaa048014611bc6575b600080fd5b34801561029957600080fd5b50610314600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611c09565b005b34801561032257600080fd5b5061032b611eee565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156103a1578082015181840152602081019050610386565b50505050905090810190601f1680156103ce5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156104075780820151818401526020810190506103ec565b50505050905090810190601f1680156104345780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b34801561045157600080fd5b50610486600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120d9565b005b34801561049457600080fd5b506104c9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061226d565b005b3480156104d757600080fd5b506104e06123f5565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610523578082015181840152602081019050610508565b505050509050019250505060405180910390f35b34801561054357600080fd5b506105c1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612406565b604051808215151515815260200191505060405180910390f35b3480156105e757600080fd5b506106a8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506125db565b005b3480156106b657600080fd5b506106eb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126af565b005b3480156106f957600080fd5b5061070261284b565b005b34801561071057600080fd5b50610719612a32565b60405180806020018360ff1660ff168152602001828103825284818151815260200191508051906020019080838360005b8381101561076557808201518184015260208101905061074a565b50505050905090810190601f1680156107925780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b3480156107ad57600080fd5b506107cf600480360381019080803560ff169060200190929190505050612b68565b005b3480156107dd57600080fd5b50610812600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bf0565b005b34801561082057600080fd5b50610829612d99565b6040518080602001806020018461ffff1661ffff168152602001838103835286818151815260200191508051906020019060200280838360005b8381101561087e578082015181840152602081019050610863565b50505050905001838103825285818151815260200191508051906020019060200280838360005b838110156108c05780820151818401526020810190506108a5565b505050509050019550505050505060405180910390f35b3480156108e357600080fd5b5061095e600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ec0565b604051808215151515815260200191505060405180910390f35b348015610984","57600080fd5b5061098d612f83565b005b34801561099b57600080fd5b506109f6600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613205565b604051808460ff1660ff168152602001838152602001828152602001935050505060405180910390f35b348015610a2c57600080fd5b50610a356132a2565b604051808215151515815260200191505060405180910390f35b348015610a5b57600080fd5b50610a90600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506133bb565b005b348015610a9e57600080fd5b50610aa76135bc565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610b19578082015181840152602081019050610afe565b50505050905090810190601f168015610b465780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b348015610b6157600080fd5b50610b96600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613705565b005b348015610ba457600080fd5b50610bd9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613a5d565b604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018661ffff1661ffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018461ffff1661ffff1681526020018360ff1660ff1681526020018260ff1660ff16815260200197505050505050505060405180910390f35b348015610c9957600080fd5b50610ca2613b46565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610cf057600080fd5b50610db1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613b6f565b005b348015610dbf57600080fd5b50610dc8613c43565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015610e3e578082015181840152602081019050610e23565b50505050905090810190601f168015610e6b5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015610ea4578082015181840152602081019050610e89565b50505050905090810190601f168015610ed15780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b348015610eee57600080fd5b50610ef7613e2e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f4557600080fd5b50610f6460048036038101908080359060200190929190505050613e54565b604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018661ffff1661ffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018461ffff1661ffff1681526020018360ff1660ff1681526020018260ff1660ff16815260200197505050505050505060405180910390f35b34801561102457600080fd5b50611059600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613f8b565b005b34801561106757600080fd5b50611070614235565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156110be57600080fd5b506110e0600480360381019080803560ff16906020019092919050505061425f565b604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018661ffff1661ffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018461ffff1661ffff1681526020018360ff1660ff1681526020018260ff1660ff16815260200197505050505050505060405180910390f35b3480156111a057600080fd5b506111a96142cd565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156111ec5780820151818401526020810190506111d1565b505050509050019250505060405180910390f35b34801561120c57600080fd5b506112156142de565b005b34801561122357600080fd5b50611245600480360381019080803560ff169060200190929190505050614687565b005b34801561125357600080fd5b506112ce600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061470f565b005b3480156112dc57600080fd5b506112e56147e1565b005b3480156112f357600080fd5b506112fc6149c8565b005b34801561130a57600080fd5b506113cb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050614b9c565b005b3480156113d957600080fd5b506114746004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050614f06565b005b34801561148257600080fd5b506114a1600480360381019080803590602001909291905050506151b2565b604051808360ff1660ff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b3480156114fc57600080fd5b50611577600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061529f565b005b34801561158557600080fd5b5061158e615584565b005b34801561159c57600080fd5b506115d1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050615806565b005b3480156115df57600080fd5b506115e8615946565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561165a57808201518184015260208101905061163f565b50505050905090810190601f1680156116875780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b3480156116a257600080fd5b506116d7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050615a8f565b604051808361ffff1661ffff1681526020018261ffff1661ffff1681526020019250505060405180910390f35b34801561171057600080fd5b50611719615b9c565b6040518082815260200191505060405180910390f35b34801561173b57600080fd5b50611770600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050615ba6565b604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018661ffff1661ffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018461ffff1661ffff1681526020018360ff1660ff1681526020018260ff1660ff16815260200197505050505050505060405180910390f35b34801561183057600080fd5b50611839615c8f565b604051808215151515815260200191505060405180910390f35b34801561185f57600080fd5b50611882600480360381019080803561ffff169060200190929190505050615ce6565b005b34801561189057600080fd5b5061190b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050615efe565b005b34801561191957600080fd5b50611981600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803560ff169060200190929190505050615f","d0565b005b34801561198f57600080fd5b50611a50600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050616269565b005b348015611a5e57600080fd5b50611a676165d3565b005b348015611a7557600080fd5b50611add600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803560ff169060200190929190505050616832565b005b348015611aeb57600080fd5b50611bac600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050616904565b604051808215151515815260200191505060405180910390f35b348015611bd257600080fd5b50611c07600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050616a79565b005b611c116132a2565b1515611c85576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60066000806000600460008560ff1660ff16815260200190815260200160002054141515611d1b576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b611d258333616c11565b91509150600081111515611da1576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff1681526020019081526020016000208190555084601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601b9080519060200190611e16929190619643565b507f4f6c679cc7adb2e5f876f3b14d907bd86f65f6a2157f4d4dfaaad2453c54602a8585604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611eac578082015181840152602081019050611e91565b50505050905090810190601f168015611ed95780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050505050565b6000606080611efb6132a2565b1515611f6f576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660186019818054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561202b5780601f106120005761010080835404028352916020019161202b565b820191906000526020600020905b81548152906001019060200180831161200e57829003601f168201915b50505050509150808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120c75780601f1061209c576101008083540402835291602001916120c7565b820191906000526020600020905b8154815290600101906020018083116120aa57829003601f168201915b50505050509050925092509250909192565b6000806120e46132a2565b1515612158576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415156121a657600080fd5b6121b2600c6000616c11565b9150915080600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612205600f84616c41565b7f65c9ee8f6e7f364137022369122efbf0b71821e5004b28fa19c7085bb5c2f50183604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612333576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f2c3e4e8028f0b13aaee3d3936311da6537e190be78af2bb673e8989493c89bf960405160405180910390a35050565b6060612401600f616e54565b905090565b6000806000806000601260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000887bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020935060118460405180828054600181600116156101000203166002900480156124fc5780601f106124da5761010080835404028352918201916124fc565b820191906000526020600020905b8154815290600101906020018083116124e8575b50509150509081526020016040518091039020925060008360000160009054906101000a900460ff1660ff16141561253757600094506125d0565b8260000160009054906101000a900460ff169150600360ff168260ff16141561256357600194506125d0565b8260030160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600160ff168260ff1614156125cb578094506125d0565b801594505b505050509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561269f576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b6126aa838383616f3f565b505050565b6000806126ba6132a2565b151561272e576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b6000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414151561277c57600080fd5b612788600b6000616c11565b9150915080600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127db600c84616c41565b7f094f6d407e0c3893237774eee826054e1fc5510eee1956e15dd49e67121fa78e8382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1505050565b6128536132a2565b15156128c7576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60066000600460008360ff1660ff16815260200190815260200160002054141515156128f257600080fd5b612914600460008360ff1660ff16815260200190815260200160002054617594565b151561291f57600080fd5b6129e5601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601b8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460","0181600116156101000203166002900480156129db5780601f106129b0576101008083540402835291602001916129db565b820191906000526020600020905b8154815290600101906020018083116129be57829003601f168201915b505050505061779c565b612a07600460008360ff1660ff16815260200190815260200160002054617b48565b1515612a1257600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b60606000612a3e6132a2565b1515612ab2576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b6014601560009054906101000a900460ff16818054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612b595780601f10612b2e57610100808354040283529160200191612b59565b820191906000526020600020905b815481529060010190602001808311612b3c57829003601f168201915b50505050509150915091509091565b612b706132a2565b1515612be4576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b612bed81617d32565b50565b6000612bfa6132a2565b1515612c6e576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111515612d28576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6163636f756e74206e6f742070656e64696e670000000000000000000000000081525060200191505060405180910390fd5b612d3181617dbb565b507ffe13a70ba606b4de27146775908752132a04b8cb181f7796e8a902b4e68a6f7382604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b606080600060056006600760009054906101000a900461ffff1682805480602002602001604051908101604052809291908181526020018280548015612e3457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612dea575b5050505050925081805480602002602001604051908101604052809291908181526020018280548015612eae57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411612e755790505b50505050509150925092509250909192565b60006011836040518082805190602001908083835b602083101515612efa5780518252602082019150602081019050602083039250612ed5565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612f8b6132a2565b1515612fff576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60076000600460008360ff1660ff168152602001908152602001600020541415151561302a57600080fd5b61304c600460008360ff1660ff16815260200190815260200160002054617594565b151561305757600080fd5b6131b8601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601d8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156131135780601f106130e857610100808354040283529160200191613113565b820191906000526020600020905b8154815290600101906020018083116130f657829003601f168201915b5050505050601e8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156131ae5780601f10613183576101008083540402835291602001916131ae565b820191906000526020600020905b81548152906001019060200180831161319157829003601f168201915b50505050506180dd565b6131da600460008360ff1660ff16815260200190815260200160002054617b48565b15156131e557600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b6000806000806011856040518082805190602001908083835b602083101515613243578051825260208201915060208101905060208303925061321e565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902090508060000160009054906101000a900460ff1681600101548260020154935093509350509193909250565b6000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c77695e4336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505050506040513d604081101561338d57600080fd5b8101908080519060200190929190805190602001909291905050509150915060008261ffff16119250505090565b60006133c56132a2565b1515613439576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115156134f3576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6163636f756e74206e6f742070656e64696e670000000000000000000000000081525060200191505060405180910390fd5b6134fc81617b48565b151561350757600080fd5b613512600c83618606565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090557f3c1cfe45ff6030e35e0d2ec7781707061c4bedc838df0d9d8fa42fb6a5e7672b82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b600060606135c86132a2565b151561363c576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166016808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156136f65780601f106136cb576101008083540402835291602001916136f6565b820191906000526020600020905b8154815290600101906020018083116136d957829003601f168201915b50505050509050915091509091565b6000806137106132a2565b1515613784576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205491506000821115156137d557600080fd5b6137df8284618848565b6137ea600f84618606565b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002050600090505b6005805490508110156139f5578273ffffffffffffffffffffffffffffffffffffffff1660058281548110151561386257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156139e85760056001600580549050038154811015156138c057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005828154811015156138fa57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660016006805490500381548110151561395957fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff1660","068281548110151561398c57fe5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff16021790555060058054809190600190036139d091906196c3565b5060068054809190600190036139e691906196ef565b505b808060010191505061382f565b7f715cab32e650f389230a2d6c652f45d03643f9d6377268a3ceae49c80923578d83604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b600080600080600080600080600b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111515613b23576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6163636f756e74206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b613b2c81613e54565b975097509750975097509750975050919395979092949650565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613c33576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b613c3e8383836180dd565b505050565b6000606080613c506132a2565b1515613cc4576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601d601e818054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613d805780601f10613d5557610100808354040283529160200191613d80565b820191906000526020600020905b815481529060010190602001808311613d6357829003601f168201915b50505050509150808054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613e1c5780601f10613df157610100808354040283529160200191613e1c565b820191906000526020600020905b815481529060010190602001808311613dff57829003601f168201915b50505050509050925092509250909192565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600080600080600360008a815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663227028c46040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160e060405180830381600087803b158015613efa57600080fd5b505af1158015613f0e573d6000803e3d6000fd5b505050506040513d60e0811015613f2457600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050975097509750975097509750975050919395979092949650565b6000613f956132a2565b1515614009576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115156140c3576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6163636f756e74206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b6140cd8183618a01565b6140d8600c83618606565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905560058290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060066001908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff160217905550507e604885216c786784445b052e44cfb10d52cb30af08d6b06cc81e93a206f81182604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600080600080600080600460008a60ff1660ff168152602001908152602001600020541415151561429257600080fd5b6142b4600460008a60ff1660ff16815260200190815260200160002054613e54565b9650965096509650965096509650919395979092949650565b60606142d9600c616e54565b905090565b6142e66132a2565b151561435a576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60026000600460008360ff1660ff168152602001908152602001600020541415151561438557600080fd5b6143a7600460008360ff1660ff16815260200190815260200160002054617594565b15156143b257600080fd5b6143ba619729565b604051809103906000f0801580156143d6573d6000803e3d6000fd5b50600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ea3c170c6009600a600760009054906101000a900461ffff166040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001806020018461ffff1661ffff168152602001838103835286818154815260200191508054801561452257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116144d8575b5050838103825285818154815260200191508054801561458957602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116145505790505b505095505050505050602060405180830381600087803b1580156145ac57600080fd5b505af11580156145c0573d6000803e3d6000fd5b505050506040513d60208110156145d657600080fd5b810190808051906020019092919050505050600960059080546145fa929190619739565b50600a600690805461460d92919061978b565b507ffd5b17f3a6d69cf18d41496f75eacb466d1ae0644cda935b54513e2711094a3a60405160405180910390a161465c600460008360ff1660ff16815260200190815260200160002054617b48565b151561466757600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b61468f6132a2565b1515614703576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b61470c81618bba565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156147d3576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b6147dd828261779c565b5050565b6147e96132a2565b151561485d576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60046000600460008360ff1660ff168152602001908152602001600020541415151561488857600080fd5b6148aa600460008360ff1660ff16815260200190815260200160002054617594565b15156148b557600080fd5b61497b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660168054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156149715780601f1061494657610100808354040283529160200191614971565b820191906000526020600020905b81548152906001019060200180831161495457829003601f168201915b5050505050618c6d565b61499d","600460008360ff1660ff16815260200190815260200160002054617b48565b15156149a857600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b6149d06132a2565b1515614a44576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60036000600460008360ff1660ff1681526020019081526020016000205414151515614a6f57600080fd5b614a91600460008360ff1660ff16815260200190815260200160002054617594565b1515614a9c57600080fd5b614b4f60148054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015614b355780601f10614b0a57610100808354040283529160200191614b35565b820191906000526020600020905b815481529060010190602001808311614b1857829003601f168201915b5050505050601560009054906101000a900460ff166190a8565b614b71600460008360ff1660ff16815260200190815260200160002054617b48565b1515614b7c57600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b614ba46132a2565b1515614c18576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60056000806000600460008560ff1660ff16815260200190815260200160002054141515614cae576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b614cb88333616c11565b91509150600081111515614d34576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff1681526020019081526020016000208190555085601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508460189080519060200190614da9929190619643565b508360199080519060200190614dc0929190619643565b507f3f766563b6dc8bae4c596a8e611d57561d743a148de0a7376c402ef2a37b73d6868686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015614e5b578082015181840152602081019050614e40565b50505050905090810190601f168015614e885780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015614ec1578082015181840152602081019050614ea6565b50505050905090810190601f168015614eee5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505050505050565b614f0e6132a2565b1515614f82576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60026000806000600460008560ff1660ff16815260200190815260200160002054141515615018576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b6150228333616c11565b9150915060008111151561509e576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff1681526020019081526020016000208190555084600990805190602001906150d29291906197eb565b5083600a90805190602001906150e9929190619875565b507f6e784e752e2413c08ef00aa2265290040ffd831e18cd6b4c49ef4247e0af89498585604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015615154578082015181840152602081019050615139565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561519657808201518184015260208101905061517b565b5050505090500194505050505060405180910390a15050505050565b60008060006003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663bbbea4c36040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016040805180830381600087803b15801561525057600080fd5b505af1158015615264573d6000803e3d6000fd5b505050506040513d604081101561527a57600080fd5b8101908080519060200190929190805190602001909291905050509250925050915091565b6152a76132a2565b151561531b576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60046000806000600460008560ff1660ff168152602001908152602001600020541415156153b1576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b6153bb8333616c11565b91509150600081111515615437576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff1681526020019081526020016000208190555084601560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601690805190602001906154ac929190619643565b507fb66262d3b338de61433948970ab20e4f6fa54b2fc5ff2ab8adf88ab579fea9aa8585604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015615542578082015181840152602081019050615527565b50505050905090810190601f16801561556f5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050505050565b61558c6132a2565b1515615600576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60056000600460008360ff1660ff168152602001908152602001600020541415151561562b57600080fd5b61564d600460008360ff1660ff16815260200190815260200160002054617594565b151561565857600080fd5b6157b9601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660188054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156157145780601f106156e957610100808354040283529160200191615714565b820191906000526020600020905b8154815290600101906020018083116156f757829003601f168201915b505050505060198054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156157af5780601f10615784576101008083540402835291602001916157af565b820191906000526020600020905b81548152906001019060200180831161579257829003601f168201915b5050505050616f3f565b6157db600460008360ff1660ff16815260200190815260200160002054617b48565b15156157e657600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b60006158106132a2565b1515615884576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115156158d557600080fd5b6158de81617dbb565b507f378d4ef21f8a8f2517b55ef93716b197a08b5e23deb58d7c4c43818323c56a2482604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b600060606159526132a2565b15156159c6576040517fc703cb12000000000000000000000000000000000000000000000000000000008152","6004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601b808054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015615a805780601f10615a5557610100808354040283529160200191615a80565b820191906000526020600020905b815481529060010190602001808311615a6357829003601f168201915b50505050509050915091509091565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c77695e4846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b158015615b4e57600080fd5b505af1158015615b62573d6000803e3d6000fd5b505050506040513d6040811015615b7857600080fd5b81019080805190602001909291908051906020019092919050505091509150915091565b6000601354905090565b600080600080600080600080600e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111515615c6c576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6163636f756e74206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b615c7581613e54565b975097509750975097509750975050919395979092949650565b60003373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905090565b615cee6132a2565b1515615d62576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60016000806000600460008560ff1660ff16815260200190815260200160002054141515615df8576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b615e028333616c11565b91509150600081111515615e7e576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff1681526020019081526020016000208190555083600760026101000a81548161ffff021916908361ffff1602179055507fed9af10492e3f51ac2f1b8d17556b72a9f1f8c29f3cf5092d63fe73653042dbd84604051808261ffff1661ffff16815260200191505060405180910390a150505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515615fc2576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b615fcc8282618c6d565b5050565b615fd86132a2565b151561604c576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60036000806000600460008560ff1660ff168152602001908152602001600020541415156160e2576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b6160ec8333616c11565b91509150600081111515616168576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff16815260200190815260200160002081905550846014908051906020019061619c929190619643565b5083601560006101000a81548160ff021916908360ff1602179055507f789666af46fc8796a38302a54d8b49e28123c2e56f22bcc51a14db5f56c938e1858560405180806020018360ff1660ff168152602001828103825284818151815260200191508051906020019080838360005b8381101561622757808201518184015260208101905061620c565b50505050905090810190601f1680156162545780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050505050565b6162716132a2565b15156162e5576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60076000806000600460008560ff1660ff1681526020019081526020016000205414151561637b576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7265717565737420616c7265616479206163746976650000000000000000000081525060200191505060405180910390fd5b6163858333616c11565b91509150600081111515616401576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5265676973746572206964206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b80600460008560ff1660ff1681526020019081526020016000208190555085601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084601d9080519060200190616476929190619643565b5083601e908051906020019061648d929190619643565b507fe6567e4e72e657550236fef054e1618c43af6e0d4922dc41139d58bc35e84189868686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561652857808201518184015260208101905061650d565b50505050905090810190601f1680156165555780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561658e578082015181840152602081019050616573565b50505050905090810190601f1680156165bb5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505050505050565b6165db6132a2565b151561664f576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b60016000600460008360ff1660ff168152602001908152602001600020541415151561667a57600080fd5b61669c600460008360ff1660ff16815260200190815260200160002054617594565b15156166a757600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca4eadb7600760029054906101000a900461ffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808261ffff1661ffff168152602001915050602060405180830381600087803b15801561675057600080fd5b505af1158015616764573d6000803e3d6000fd5b505050506040513d602081101561677a57600080fd5b810190808051906020019092919050505050600760029054906101000a900461ffff16600760006101000a81548161ffff021916908361ffff1602179055507f6d2d8bb18d1b2d1d8afaad90aa25682849ce52cb40abce1ea93a717b20c7189460405160405180910390a1616807600460008360ff1660ff16815260200190815260200160002054617b48565b151561681257600080fd5b600460008260ff1660ff1681526020019081526020016000206000905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156168f6576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f596f7520617265206e6f742061646d696e00000000000000000000000000000081525060200191505060405180910390fd5b61690082826190a8565b5050565b60006011846040518082805190602001908083835b60208310151561693e5780518252602082019150602081019050602083039250616919565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060040160008473ffffffffffff","ffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836040518082805190602001908083835b6020831015156169e957805182526020820191506020810190506020830392506169c4565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1690509392505050565b6000616a836132a2565b1515616af7576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420676f7665726e6f7273000000000000000000000081525060200191505060405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111515616b4857600080fd5b616b5181617b48565b1515616b5c57600080fd5b616b67600f83618606565b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090557fa2b82124db502ae22cbe3485f3e7586a86eedf8e44f988169c82f46fd6ce0fea82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b600080600160008154809291906001019190505550616c336001548585619327565b600154915091509250929050565b60008173ffffffffffffffffffffffffffffffffffffffff1614151515616cf6576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f4c6962416464726573735365743a2076616c75652063616e277420626520307881526020017f300000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b616d0082826195f4565b151515616d9b576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f4c6962416464726573735365743a2076616c756520616c72656164792065786981526020017f73747320696e20746865207365742e000000000000000000000000000000000081525060400191505060405180910390fd5b816001018190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505081600101805490508260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60608060008360010180549050604051908082528060200260200182016040528015616e8f5781602001602082028038833980820191505090505b5091505b8360010180549050811015616f35578360010181815481101515616eb357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168282815181101515616eec57fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050616e93565b8192505050919050565b60008060606011846040518082805190602001908083835b602083101515616f7c5780518252602082019150602081019050602083039250616f57565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020925060008360000160009054906101000a900460ff1660ff161415151561703e576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f67726f7570206e6f74206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b846040518082805190602001908083835b602083101515617074578051825260208201915060208101905060208303925061704f565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902091508260040160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff161515156171b6576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f66756e6374696f6e20616c72656164792061646400000000000000000000000081525060200191505060405180910390fd5b601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156172d85780601f106172ad576101008083540402835291602001916172d8565b820191906000526020600020905b8154815290600101906020018083116172bb57829003601f168201915b50505050509050600081511415156172ef57600080fd5b60018360040160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550826002016000815480929190600101919050555083601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020908051906020019061744e929190619643565b507f72920f24307e6952804d77a359a449e836816f46735327c47c6a76bec5caffcc868686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156174e95780820151818401526020810190506174ce565b50505050905090810190601f1680156175165780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561754f578082015181840152602081019050617534565b50505050905090810190601f16801561757c5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505050505050565b6000806000806003600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156175f35760009250617795565b6003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663e8ffc242856040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15801561769857600080fd5b505af11580156176ac573d6000803e3d6000fd5b505050506040513d60208110156176c257600080fd5b81019080805190602001909291905050509050600115158115151415617791576003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16847f44e441ea025d9c27af4a8a390a4f8cc60b91f2be08659049e54ab904e342f18c30604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a35b8092505b5050919050565b60006011826040518082805190602001908083835b6020831015156177d657805182526020820191506020810190506020830392506177b1565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156178cb576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6163636f756e74206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b60006011836040518082805190602001908083835b60208310151561790557805182526020820191506020810190506020830392506178e0565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060030160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a","81548160ff0219169083151502179055506011826040518082805190602001908083835b6020831015156179c757805182526020820191506020810190506020830392506179a2565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206001016000815480929190600190039190505550816040518082805190602001908083835b602083101515617a445780518252602082019150602081019050602083039250617a1f565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090507fb88fd5b1e0a2f3570ca558ddc95e563eba1eb33f215410ac82b4762405b7a08a8383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015617b08578082015181840152602081019050617aed565b50505050905090810190601f168015617b355780820380516001836020036101000a031916815260200191505b50935050505060405180910390a1505050565b60008060006001915060006003600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415617bac5760009150617cc1565b6003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663e3ccca1560026040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260ff168152602001915050600060405180830381600087803b158015617c5557600080fd5b505af1158015617c69573d6000803e3d6000fd5b5050505060006003600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b811515847f55f34a650247f5482c8d8913747ecdb1d36553fe9b42c414b96cad93d675c51b30604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a38192505050919050565b6000600460008360ff1660ff1681526020019081526020016000205414151515617d5b57600080fd5b617d7d600460008360ff1660ff16815260200190815260200160002054617dbb565b1515617d8857600080fd5b8060ff167fe1850379bf4e321a0591a004c069902632706c2d21d1503ecd8aa0354ac87ad360405160405180910390a250565b600080600080600080600080339650600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c77695e4886040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b158015617e8657600080fd5b505af1158015617e9a573d6000803e3d6000fd5b505050506040513d6040811015617eb057600080fd5b81019080805190602001909291908051906020019092919050505095509550600193506000925060008661ffff161415617eed5760009350618047565b600360008a815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915060008273ffffffffffffffffffffffffffffffffffffffff161415617f4b5760009350618046565b8190508073ffffffffffffffffffffffffffffffffffffffff1663f61eb27e88886040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1661ffff168152602001925050506040805180830381600087803b158015617ff857600080fd5b505af115801561800c573d6000803e3d6000fd5b505050506040513d604081101561802257600080fd5b81019080805190602001909291908051906020019092919050505080945081955050505b5b8673ffffffffffffffffffffffffffffffffffffffff16897fde70b399d7539bc3e7042671a3f047a2c6a8443ef9a2e914de5e1eddbc247e4e863060405180831515151581526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a383975050505050505050919050565b6000806011836040518082805190602001908083835b60208310151561811857805182526020820191506020810190506020830392506180f3565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020915060008260000160009054906101000a900460ff1660ff16141515156181da576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f67726f7570206e6f74206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b836040518082805190602001908083835b60208310151561821057805182526020820191506020810190506020830392506181eb565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090508160040160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff161515618351576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f66756e6374696f6e206e6f74206578697374000000000000000000000000000081525060200191505060405180910390fd5b60008260040160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055508160020160008154809291906001900391905055506020604051908101604052806000815250601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002090805190602001906184c1929190619643565b507f5f67318a46f19a1582f641fe5bda42c33716f3f06d5960b5e92efc04c2c4cc50858585604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561855c578082015181840152602081019050618541565b50505050905090810190601f1680156185895780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156185c25780820151818401526020810190506185a7565b50505050905090810190601f1680156185ef5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a15050505050565b600080600061861585856195f4565b15156186af576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f4c6962416464726573735365743a2076616c756520646f65736e27742065786981526020017f73742e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60018560000160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403925060018560010180549050039150846001018281548110151561871457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080856001018481548110151561875357fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600183018560000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508460000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558460010180548091906001900361884091906196c3565b505050505050565b8161885281617594565b15156188ec576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f5745476f7665726e616e63653a2076616c69642072657175657374206661696c81526020017f65642e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fdc10eed8360006040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffff","ffffffffffffffffffff1681526020018261ffff16815260200192505050602060405180830381600087803b1580156189b657600080fd5b505af11580156189ca573d6000803e3d6000fd5b505050506040513d60208110156189e057600080fd5b8101908080519060200190929190505050506189fb81617b48565b50505050565b81618a0b81617594565b1515618aa5576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f5745476f7665726e616e63653a2076616c69642072657175657374206661696c81526020017f65642e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fdc10eed8360016040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff16815260200192505050602060405180830381600087803b158015618b6f57600080fd5b505af1158015618b83573d6000803e3d6000fd5b505050506040513d6020811015618b9957600080fd5b810190808051906020019092919050505050618bb481617b48565b50505050565b6000600460008360ff1660ff1681526020019081526020016000205414151515618be357600080fd5b618c05600460008360ff1660ff16815260200190815260200160002054617b48565b1515618c1057600080fd5b600460008260ff1660ff168152602001908152602001600020600090557fdcbb8f5f566f47c944e930a9ae552f8f8c6f71d65c8e0ca63e5d4650bd16aef081604051808260ff1660ff16815260200191505060405180910390a150565b60006011826040518082805190602001908083835b602083101515618ca75780518252602082019150602081019050602083039250618c82565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900460ff1660ff1614151515618d64576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f67726f7570206e6f74206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b6011816040518082805190602001908083835b602083101515618d9c5780518252602082019150602081019050602083039250618d77565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515618e92576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6163636f756e7420616c7265616479206164640000000000000000000000000081525060200191505060405180910390fd5b60016011826040518082805190602001908083835b602083101515618ecc5780518252602082019150602081019050602083039250618ea7565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506011816040518082805190602001908083835b602083101515618f8e5780518252602082019150602081019050602083039250618f69565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600101600081548092919060010191905055507ff674025878f9905dcf119f8ce7eea809dba2e4aa908dba6b5698785182b0ad688282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561906957808201518184015260208101905061904e565b50505050905090810190601f1680156190965780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b606082905060008151141515156190be57600080fd5b60006011846040518082805190602001908083835b6020831015156190f857805182526020820191506020810190506020830392506190d3565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900460ff1660ff161415156191b4576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f67726f757020616c72656164792065786973740000000000000000000000000081525060200191505060405180910390fd5b6060604051908101604052808360ff1681526020016000815260200160008152506011846040518082805190602001908083835b60208310151561920d57805182526020820191506020810190506020830392506191e8565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160010155604082015181600201559050507fcf95dc959312b4904f4de862aad04f847527c51e5b446799603101f19526567f838360405180806020018360ff1660ff168152602001828103825284818151815260200191508051906020019080838360005b838110156192e75780820151818401526020810190506192cc565b50505050905090810190601f1680156193145780820380516001836020036101000a031916815260200191505b50935050505060405180910390a1505050565b60008060008060006003600089815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156193be576003600088815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692508293506195ea565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638f2160976040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561944457600080fd5b505af1158015619458573d6000803e3d6000fd5b505050506040513d602081101561946e57600080fd5b810190808051906020019092919050505091508686868461948d61991f565b808581526020018460ff1660ff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff1661ffff168152602001945050505050604051809103906000f080158015619502573d6000803e3d6000fd5b509050806003600089815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508473ffffffffffffffffffffffffffffffffffffffff168660ff16887fe26ea3d3c9637079e1652fb43c524b8420a3a0987e6eecf5607e4b8df20036a98530604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a48093505b5050509392505050565b6000808360000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061968457805160ff19168380011785556196b2565b828001600101855582156196b2579182015b828111156196b1578251825591602001919060010190619696565b5b5090506196bf919061992f565b5090565b8154818355818111156196ea578183600052602060002091820191016196e9919061992f565b5b505050565b81548183558181111561972457600f016010900481600f01601090048360005260206000209182019101619723919061992f565b5b505050565b60405161143080619c9383390190565b82805482825590600052602060002090810192821561977a5760005260206000209182015b8281111561977957825482559160010191906001019061975e565b5b5090506197879190619954565b5090565b82805482825590600052602060002090600f016010900481019282156197da57600052602060002091600f016010900482015b828111156197d95782548255916001019190600101906197be565b5b5090506197e79190619997565b5090565b828054828255906000526020600020908101928215619864579160200282015b828111156198635782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061980b565b5b5090506198719190619954565b5090565b82805482825590600052602060002090600f0160109004810192821561990e5791602002820160005b838211156198de57835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030261989e565b801561990c5782816101000a81549061ffff02191690556002016020816001010492830192600103026198de565b505b50905061991b9190619997565b5090565b604051610d7a8061b0c383390190565b61995191905b8082111561994d576000816000905550600101619935565b5090565b90565b61999491905b8082111561999057600081816101000a81549073ffffffffffffffffffffffffffffffff","ffffffff02191690555060010161995a565b5090565b90565b6199c591905b808211156199c157600081816101000a81549061ffff02191690555060010161999d565b5090565b90565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ea3c170c8484846040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001806020018461ffff1661ffff168152602001838103835286818151815260200191508051906020019060200280838360005b83811015619acb578082015181840152602081019050619ab0565b50505050905001838103825285818151815260200191508051906020019060200280838360005b83811015619b0d578082015181840152602081019050619af2565b5050505090500195505050505050602060405180830381600087803b158015619b3557600080fd5b505af1158015619b49573d6000803e3d6000fd5b505050506040513d6020811015619b5f57600080fd5b8101908080519060200190929190505050508260059080519060200190619b879291906197eb565b508160069080519060200190619b9e929190619875565b5080600760006101000a81548161ffff021916908361ffff1602179055507fab88aac081194e202f78b52f9630ee711ed21111fd9c301de2d051725ae4cbab8383836040518080602001806020018461ffff1661ffff168152602001838103835286818151815260200191508051906020019060200280838360005b83811015619c35578082015181840152602081019050619c1a565b50505050905001838103825285818151815260200191508051906020019060200280838360005b83811015619c77578082015181840152602081019050619c5c565b505050509050019550505050505060405180910390a150505056006080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4e439af047d8cc4b00af24c9153b5b998673f7f320f5342909b232ce62ec177c60405160405180910390a461136b806100c56000396000f300608060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305282c701461009e57806328e91489146100e157806387a2fee4146101385780638f216097146101fb578063c77695e41461022e578063ca4eadb71461029c578063ea3c170c146102e5578063f910baf9146103b4578063fdc10eed1461044e575b600080fd5b3480156100aa57600080fd5b506100df600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104b7565b005b3480156100ed57600080fd5b506100f6610676565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561014457600080fd5b5061014d61069b565b604051808461ffff1661ffff1681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156101a2578082015181840152602081019050610187565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156101e45780820151818401526020810190506101c9565b505050509050019550505050505060405180910390f35b34801561020757600080fd5b506102106106d1565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561023a57600080fd5b5061026f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106e5565b604051808361ffff1661ffff1681526020018261ffff1661ffff1681526020019250505060405180910390f35b3480156102a857600080fd5b506102cb600480360381019080803561ffff169060200190929190505050610716565b604051808215151515815260200191505060405180910390f35b3480156102f157600080fd5b5061039a6004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803561ffff169060200190929190505050610828565b604051808215151515815260200191505060405180910390f35b3480156103c057600080fd5b5061043460048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803561ffff169060200190929190803561ffff169060200190929190505050610b6e565b604051808215151515815260200191505060405180910390f35b34801561045a57600080fd5b5061049d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190505050610e62565b604051808215151515815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a1576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4e439af047d8cc4b00af24c9153b5b998673f7f320f5342909b232ce62ec177c60405160405180910390a450565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006060806060806106ad6001610ff8565b91509150600460009054906101000a900461ffff1682829450945094505050909192565b600460009054906101000a900461ffff1681565b6000806106fc83600161110e90919063ffffffff16565b600460009054906101000a900461ffff1691509150915091565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610802576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600460006101000a81548161ffff021916908361ffff16021790555060019050919050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610915576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008551118015610927575083518551145b151561099b576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496c6c6567616c2061727261797300000000000000000000000000000000000081525060200191505060405180910390fd5b82600460006101000a81548161ffff021916908361ffff160217905550600090505b8451811015610b6257600084828151811015156109d657fe5b9060200190602002015161ffff16111515610a59576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496c6c6567616c2077656967687421000000000000000000000000000000000081525060200191505060405180910390fd5b610a9d8582815181101515610a6a57fe5b906020019060200201518583815181101515610a8257fe5b90602001906020020151600161119c9092919063ffffffff16565b8481815181101515610aab57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167fc796118e62640058e33e892ff0633d6a0604ff63a13e2d200a0e2fb29a3dac928583815181101515610afa57fe5b9060200190602002015130604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a280806001019150506109bd565b60019150509392505050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c5b576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f815260","20017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008551111515610cd4576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f496c6c6567616c2077686f73000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008461ffff16111515610d50576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496c6c6567616c2077656967687421000000000000000000000000000000000081525060200191505060405180910390fd5b82600460006101000a81548161ffff021916908361ffff160217905550600090505b8451811015610e5657610da88582815181101515610d8c57fe5b9060200190602002015185600161119c9092919063ffffffff16565b8481815181101515610db657fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167fc796118e62640058e33e892ff0633d6a0604ff63a13e2d200a0e2fb29a3dac928530604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a28080600101915050610d72565b60019150509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f4e576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610f648383600161119c9092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167fc796118e62640058e33e892ff0633d6a0604ff63a13e2d200a0e2fb29a3dac928330604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a26001905092915050565b60608082600101836002018180548060200260200160405190810160405280929190818152602001828054801561108457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161103a575b50505050509150808054806020026020016040519081016040528092919081815260200182805480156110fe57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116110c55790505b5050505050905091509150915091565b60008060008460000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150846002016001830381548110151561116b57fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff169050809250505092915050565b60008360000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008114156112f457836001018390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508360020182908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff1602179055505083600101805490508460000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611339565b81846002016001830381548110151561130957fe5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff1602179055505b505050505600a165627a7a72305820b99d42dfe96990bb4a5f25a6b49cd9e1b3201dc515475bc0d98f6e569cbe9a6a0029608060405234801561001057600080fd5b50604051608080610d7a83398101806040528101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4e439af047d8cc4b00af24c9153b5b998673f7f320f5342909b232ce62ec177c60405160405180910390a48360018190555080600260006101000a81548161ffff021916908361ffff1602179055506000600460006101000a81548161ffff021916908361ffff1602179055506000600460026101000a81548160ff021916908360ff16021790555082600460036101000a81548160ff021916908360ff160217905550816004806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050610bab806101cf6000396000f300608060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305282c701461009e578063227028c4146100e157806325780318146101aa57806328e91489146102055780632dbf64011461025c578063bbbea4c3146102b3578063e3ccca1514610317578063e8ffc24214610347578063f61eb27e1461038c575b600080fd5b3480156100aa57600080fd5b506100df600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610404565b005b3480156100ed57600080fd5b506100f66105c3565b604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018661ffff1661ffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018461ffff1661ffff1681526020018360ff1660ff1681526020018260ff1660ff16815260200197505050505050505060405180910390f35b3480156101b657600080fd5b506101eb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610650565b604051808215151515815260200191505060405180910390f35b34801561021157600080fd5b5061021a6106a6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561026857600080fd5b506102716106cb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102bf57600080fd5b506102c86106f0565b604051808360ff1660ff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b34801561032357600080fd5b50610345600480360381019080803560ff16906020019092919050505061072d565b005b34801561035357600080fd5b506103726004803603810190808035906020019092919050505061087c565b604051808215151515815260200191505060405180910390f35b34801561039857600080fd5b506103db600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff1690602001909291905050506108b1565b60405180831515151581526020018261ffff1661ffff1681526020019250505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156104ee576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4e439af047d8cc4b00af24c9153b5b998673f7f320f5342909b232ce62ec177c60405160405180910390a450565b60008060008060008060006001546004809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900461ffff1630600460009054906101000a900461ffff16600460039054906101000a900460ff16600460029054906101000a900460ff16839350965096509650965096509650965090919293949596565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6004809054906101000a900473ffffffffffffffffffffffffffffffffffffffff","1681565b600080600460039054906101000a900460ff166004809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610817576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168160ff167fbe01663bd17454b73ac522a855cfc1eb2c887f130e9100c94c0dcc3a5704801b60405160405180910390a380600460026101000a81548160ff021916908360ff16021790555050565b6000600260009054906101000a900461ffff1661ffff16600460009054906101000a900461ffff1661ffff1610159050919050565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156109a0576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600015158115151415610a885783600460009054906101000a900461ffff1601600460006101000a81548161ffff021916908361ffff1602179055506001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610aa4565b6000600460009054906101000a900461ffff1692509250610b77565b8361ffff168573ffffffffffffffffffffffffffffffffffffffff167f7a2721a057622ab3b8b854b33d269dd5f47f7ebae67f5b4e5f94d32c3f2cf03b30604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a3600260009054906101000a900461ffff1661ffff16600460009054906101000a900461ffff1661ffff16101515610b5f57610b5e600161072d565b5b6001600460009054906101000a900461ffff16925092505b5092509290505600a165627a7a72305820b0ad1514b3727bed370f4703ff7de6cd7bdd16a13e051879c4da44392aca05d80029a165627a7a7230582012776cf76784d3390141f54e281efd46f3b8fa0f95cb3bfaa8184518cc8a95ac00296080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4e439af047d8cc4b00af24c9153b5b998673f7f320f5342909b232ce62ec177c60405160405180910390a461136b806100c56000396000f300608060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305282c701461009e57806328e91489146100e157806387a2fee4146101385780638f216097146101fb578063c77695e41461022e578063ca4eadb71461029c578063ea3c170c146102e5578063f910baf9146103b4578063fdc10eed1461044e575b600080fd5b3480156100aa57600080fd5b506100df600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104b7565b005b3480156100ed57600080fd5b506100f6610676565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561014457600080fd5b5061014d61069b565b604051808461ffff1661ffff1681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156101a2578082015181840152602081019050610187565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156101e45780820151818401526020810190506101c9565b505050509050019550505050505060405180910390f35b34801561020757600080fd5b506102106106d1565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561023a57600080fd5b5061026f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106e5565b604051808361ffff1661ffff1681526020018261ffff1661ffff1681526020019250505060405180910390f35b3480156102a857600080fd5b506102cb600480360381019080803561ffff169060200190929190505050610716565b604051808215151515815260200191505060405180910390f35b3480156102f157600080fd5b5061039a6004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803561ffff169060200190929190505050610828565b604051808215151515815260200191505060405180910390f35b3480156103c057600080fd5b5061043460048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803561ffff169060200190929190803561ffff169060200190929190505050610b6e565b604051808215151515815260200191505060405180910390f35b34801561045a57600080fd5b5061049d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190505050610e62565b604051808215151515815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a1576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4e439af047d8cc4b00af24c9153b5b998673f7f320f5342909b232ce62ec177c60405160405180910390a450565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006060806060806106ad6001610ff8565b91509150600460009054906101000a900461ffff1682829450945094505050909192565b600460009054906101000a900461ffff1681565b6000806106fc83600161110e90919063ffffffff16565b600460009054906101000a900461ffff1691509150915091565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610802576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600460006101000a81548161ffff021916908361ffff16021790555060019050919050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610915576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008551118015610927575083518551145b151561099b576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496c6c6567616c2061727261797300000000000000000000000000000000000081525060200191505060405180910390fd5b82600460006101000a81548161ffff021916908361ffff160217905550600090505b8451811015610b6257600084828151811015156109d657fe5b9060200190602002015161ffff16111515610a59576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496c6c6567616c2077656967687421000000000000000000000000000000000081525060200191505060","405180910390fd5b610a9d8582815181101515610a6a57fe5b906020019060200201518583815181101515610a8257fe5b90602001906020020151600161119c9092919063ffffffff16565b8481815181101515610aab57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167fc796118e62640058e33e892ff0633d6a0604ff63a13e2d200a0e2fb29a3dac928583815181101515610afa57fe5b9060200190602002015130604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a280806001019150506109bd565b60019150509392505050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c5b576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008551111515610cd4576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f496c6c6567616c2077686f73000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008461ffff16111515610d50576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496c6c6567616c2077656967687421000000000000000000000000000000000081525060200191505060405180910390fd5b82600460006101000a81548161ffff021916908361ffff160217905550600090505b8451811015610e5657610da88582815181101515610d8c57fe5b9060200190602002015185600161119c9092919063ffffffff16565b8481815181101515610db657fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167fc796118e62640058e33e892ff0633d6a0604ff63a13e2d200a0e2fb29a3dac928530604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a28080600101915050610d72565b60019150509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f4e576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f57454261736963417574683a206f6e6c79206f776e657220697320617574686f81526020017f72697a65642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610f648383600161119c9092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167fc796118e62640058e33e892ff0633d6a0604ff63a13e2d200a0e2fb29a3dac928330604051808361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a26001905092915050565b60608082600101836002018180548060200260200160405190810160405280929190818152602001828054801561108457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161103a575b50505050509150808054806020026020016040519081016040528092919081815260200182805480156110fe57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116110c55790505b5050505050905091509150915091565b60008060008460000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150846002016001830381548110151561116b57fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff169050809250505092915050565b60008360000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008114156112f457836001018390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508360020182908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff1602179055505083600101805490508460000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611339565b81846002016001830381548110151561130957fe5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff1602179055505b505050505600a165627a7a72305820b99d42dfe96990bb4a5f25a6b49cd9e1b3201dc515475bc0d98f6e569cbe9a6a0029"};

    public static final String SM_BINARY = String.join("", SM_BINARY_ARRAY);

    public static final String[] ABI_ARRAY = {"[{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"approveRemoveGovernorReq\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"requestAddGovernor\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getRequestInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint16\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint16\"},{\"name\":\"\",\"type\":\"uint8\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"executeRemoveFunctionFromGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"viewRemoveFunctionToGroup\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"string\"},{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getGovs\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"},{\"name\":\"\",\"type\":\"uint16[]\"},{\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"viewAddFunctionToGroup\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"string\"},{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"approveAddGovernorReq\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"executeRemoveGovernorReq\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"group\",\"type\":\"string\"},{\"name\":\"contractAddr\",\"type\":\"address\"},{\"name\":\"func\",\"type\":\"string\"}],\"name\":\"containsFunction\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"_voteWeight\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"contractAddr\",\"type\":\"address\"},{\"name\":\"func\",\"type\":\"string\"},{\"name\":\"group\",\"type\":\"string\"}],\"name\":\"removeFunctionFromGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"txType\",\"type\":\"uint8\"}],\"name\":\"deleteSingle\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"deleteAddGovernorReq\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"contractAddr\",\"type\":\"address\"},{\"name\":\"func\",\"type\":\"string\"},{\"name\":\"group\",\"type\":\"string\"}],\"name\":\"requestRemoveFunctionFromGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"viewCreateGroup\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getGovernorsToRemove\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"},{\"name\":\"group\",\"type\":\"string\"}],\"name\":\"requestRemoveAccountFromGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"viewAddAccountToGroup\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"executeRemoveAccountFromGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getAdmin\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"inGovs\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"},{\"name\":\"group\",\"type\":\"string\"}],\"name\":\"requestAddAccountToGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getRemoveGovRequest\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint16\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint16\"},{\"name\":\"\",\"type\":\"uint8\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"executeSetThreshold\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"opMode\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"executeCreateGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"executeResetGovernAccounts\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"viewRemoveAccountToGroup\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"txType\",\"type\":\"uint8\"}],\"name\":\"approveSingle\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"group\",\"type\":\"string\"},{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"containsAccount\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"executeAddGovernorReq\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"group\",\"type\":\"string\"}],\"name\":\"getGroup\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"who\",\"type\":\"address\"}],\"name\":\"getWeight\",\"outputs\":[{\"name\":\"\",\"type\":\"uint16\"},{\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"executeAddAccountToGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contractAddr\",\"type\":\"address\"},{\"name\":\"sig\",\"type\":\"bytes4\"},{\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"canCallFunction\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"},{\"name\":\"group\",\"type\":\"string\"}],\"name\":\"removeAccountFromGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newAdminAddr\",\"type\":\"address\"}],\"name\":\"transferAdminAuth\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isAdmin\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"contractAddr\",\"type\":\"address\"},{\"name\":\"func\",\"type\":\"string\"},{\"name\":\"group\",\"type\":\"string\"}],\"name\":\"addFunctionToGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getRequestTxType\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"},{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"group\",\"type\":\"string\"},{\"name\":\"mode\",\"type\":\"uint8\"}],\"name\":\"createGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"functio","n\"},{\"constant\":false,\"inputs\":[{\"name\":\"governors\",\"type\":\"address[]\"},{\"name\":\"weights\",\"type\":\"uint16[]\"}],\"name\":\"requestResetGovernors\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"deleteRemoveGovernorReq\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"executeAddFunctionToGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getVoteWeight\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"txType\",\"type\":\"uint8\"}],\"name\":\"getRequestSingle\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint16\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint16\"},{\"name\":\"\",\"type\":\"uint8\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getAddGovRequest\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint16\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint16\"},{\"name\":\"\",\"type\":\"uint8\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"contractAddr\",\"type\":\"address\"},{\"name\":\"func\",\"type\":\"string\"},{\"name\":\"group\",\"type\":\"string\"}],\"name\":\"requestAddFunctionToGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"},{\"name\":\"group\",\"type\":\"string\"}],\"name\":\"addAccountToGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"requestRemoveGovernor\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getGovernorsToAdd\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"group\",\"type\":\"string\"},{\"name\":\"mode\",\"type\":\"uint8\"}],\"name\":\"requestCreateGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newThreshold\",\"type\":\"uint16\"}],\"name\":\"requestSetThreshold\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"mode\",\"type\":\"uint256\"},{\"name\":\"accounts\",\"type\":\"address[]\"},{\"name\":\"weights\",\"type\":\"uint16[]\"},{\"name\":\"threshold\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"group\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"mode\",\"type\":\"uint8\"}],\"name\":\"RequestCreateGroup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"group\",\"type\":\"string\"}],\"name\":\"RequestAddAccountToGroup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"contractAddr\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"func\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"group\",\"type\":\"string\"}],\"name\":\"RequestAddFunctionToGroup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"group\",\"type\":\"string\"}],\"name\":\"RequestRemoveAccountFromGroup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"contractAddr\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"func\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"group\",\"type\":\"string\"}],\"name\":\"RequestRemoveFunctionFromGroup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"group\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"mode\",\"type\":\"uint8\"}],\"name\":\"CreateGroup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"group\",\"type\":\"string\"}],\"name\":\"AddAccountToGroup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"contractAddr\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"func\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"group\",\"type\":\"string\"}],\"name\":\"AddFunctionToGroup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"group\",\"type\":\"string\"}],\"name\":\"RemoveAccountFromGroup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"contractAddr\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"func\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"group\",\"type\":\"string\"}],\"name\":\"RemoveFunctionFromGroup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"accounts\",\"type\":\"address[]\"},{\"indexed\":false,\"name\":\"weights\",\"type\":\"uint16[]\"},{\"indexed\":false,\"name\":\"threshold\",\"type\":\"uint16\"}],\"name\":\"InitWeightData\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"threshold\",\"type\":\"uint16\"}],\"name\":\"RequestSetThreshold\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"ExecuteSetThreshold\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"governors\",\"type\":\"address[]\"},{\"indexed\":false,\"name\":\"weights\",\"type\":\"uint16[]\"}],\"name\":\"RequestResetGovernors\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"ExecuteResetGovernAccounts\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"reqId\",\"type\":\"uint256\"}],\"name\":\"RequestAddGovernor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"DeleteAddGovernorReq\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"ApproveAddGovernorReq\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"ExecuteAddGovernorReq\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"RequestRemoveGovernor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"DeleteRemoveGovernorReq\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"ApproveRemoveGovernorReq\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"ExecuteRemoveGovernorReq\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"txType\",\"type\":\"uint8\"}],\"name\":\"ApproveSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"txType\",\"type\":\"uint8\"}],\"name\":\"DeleteSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"voteWeight\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"LogSetVoteWeight\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"txType\",\"type\":\"uint8\"},{\"indexed\":true,\"name\":\"requestAddress\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"threshold\",\"type\":\"uint16\"},{\"indexed\":false,\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"LogRegister\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"result\",\"type\":\"bool\"},{\"indexed\":false,\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"LogUnregister\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"who\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"b\",\"type\":\"bool\"},{\"indexed\":false,\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"LogApprove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"who\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"b\",\"type\":\"bool\"},{\"indexed\":false,\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"LogUnapprove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"requestAddress","\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"LogCanCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"oldAdmin\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"TransferAdminAuth\",\"type\":\"event\"}]"};

    public static final String ABI = String.join("", ABI_ARRAY);

    public static final String FUNC_APPROVEREMOVEGOVERNORREQ = "approveRemoveGovernorReq";

    public static final String FUNC_REQUESTADDGOVERNOR = "requestAddGovernor";

    public static final String FUNC_GETREQUESTINFO = "getRequestInfo";

    public static final String FUNC_EXECUTEREMOVEFUNCTIONFROMGROUP = "executeRemoveFunctionFromGroup";

    public static final String FUNC_VIEWREMOVEFUNCTIONTOGROUP = "viewRemoveFunctionToGroup";

    public static final String FUNC_GETGOVS = "getGovs";

    public static final String FUNC_VIEWADDFUNCTIONTOGROUP = "viewAddFunctionToGroup";

    public static final String FUNC_APPROVEADDGOVERNORREQ = "approveAddGovernorReq";

    public static final String FUNC_EXECUTEREMOVEGOVERNORREQ = "executeRemoveGovernorReq";

    public static final String FUNC_CONTAINSFUNCTION = "containsFunction";

    public static final String FUNC__VOTEWEIGHT = "_voteWeight";

    public static final String FUNC_REMOVEFUNCTIONFROMGROUP = "removeFunctionFromGroup";

    public static final String FUNC_DELETESINGLE = "deleteSingle";

    public static final String FUNC_DELETEADDGOVERNORREQ = "deleteAddGovernorReq";

    public static final String FUNC_REQUESTREMOVEFUNCTIONFROMGROUP = "requestRemoveFunctionFromGroup";

    public static final String FUNC_VIEWCREATEGROUP = "viewCreateGroup";

    public static final String FUNC_GETGOVERNORSTOREMOVE = "getGovernorsToRemove";

    public static final String FUNC_REQUESTREMOVEACCOUNTFROMGROUP = "requestRemoveAccountFromGroup";

    public static final String FUNC_VIEWADDACCOUNTTOGROUP = "viewAddAccountToGroup";

    public static final String FUNC_EXECUTEREMOVEACCOUNTFROMGROUP = "executeRemoveAccountFromGroup";

    public static final String FUNC_GETADMIN = "getAdmin";

    public static final String FUNC_INGOVS = "inGovs";

    public static final String FUNC_REQUESTADDACCOUNTTOGROUP = "requestAddAccountToGroup";

    public static final String FUNC_GETREMOVEGOVREQUEST = "getRemoveGovRequest";

    public static final String FUNC_EXECUTESETTHRESHOLD = "executeSetThreshold";

    public static final String FUNC_OPMODE = "opMode";

    public static final String FUNC_EXECUTECREATEGROUP = "executeCreateGroup";

    public static final String FUNC_EXECUTERESETGOVERNACCOUNTS = "executeResetGovernAccounts";

    public static final String FUNC_VIEWREMOVEACCOUNTTOGROUP = "viewRemoveAccountToGroup";

    public static final String FUNC_APPROVESINGLE = "approveSingle";

    public static final String FUNC_CONTAINSACCOUNT = "containsAccount";

    public static final String FUNC_EXECUTEADDGOVERNORREQ = "executeAddGovernorReq";

    public static final String FUNC_GETGROUP = "getGroup";

    public static final String FUNC_GETWEIGHT = "getWeight";

    public static final String FUNC_EXECUTEADDACCOUNTTOGROUP = "executeAddAccountToGroup";

    public static final String FUNC_CANCALLFUNCTION = "canCallFunction";

    public static final String FUNC_REMOVEACCOUNTFROMGROUP = "removeAccountFromGroup";

    public static final String FUNC_TRANSFERADMINAUTH = "transferAdminAuth";

    public static final String FUNC_ISADMIN = "isAdmin";

    public static final String FUNC_ADDFUNCTIONTOGROUP = "addFunctionToGroup";

    public static final String FUNC_GETREQUESTTXTYPE = "getRequestTxType";

    public static final String FUNC_CREATEGROUP = "createGroup";

    public static final String FUNC_REQUESTRESETGOVERNORS = "requestResetGovernors";

    public static final String FUNC_DELETEREMOVEGOVERNORREQ = "deleteRemoveGovernorReq";

    public static final String FUNC_EXECUTEADDFUNCTIONTOGROUP = "executeAddFunctionToGroup";

    public static final String FUNC_GETVOTEWEIGHT = "getVoteWeight";

    public static final String FUNC_GETREQUESTSINGLE = "getRequestSingle";

    public static final String FUNC_GETADDGOVREQUEST = "getAddGovRequest";

    public static final String FUNC_REQUESTADDFUNCTIONTOGROUP = "requestAddFunctionToGroup";

    public static final String FUNC_ADDACCOUNTTOGROUP = "addAccountToGroup";

    public static final String FUNC_REQUESTREMOVEGOVERNOR = "requestRemoveGovernor";

    public static final String FUNC_GETGOVERNORSTOADD = "getGovernorsToAdd";

    public static final String FUNC_REQUESTCREATEGROUP = "requestCreateGroup";

    public static final String FUNC_REQUESTSETTHRESHOLD = "requestSetThreshold";

    public static final Event REQUESTCREATEGROUP_EVENT = new Event("RequestCreateGroup", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Uint8>() {}));
    ;

    public static final Event REQUESTADDACCOUNTTOGROUP_EVENT = new Event("RequestAddAccountToGroup", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event REQUESTADDFUNCTIONTOGROUP_EVENT = new Event("RequestAddFunctionToGroup", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event REQUESTREMOVEACCOUNTFROMGROUP_EVENT = new Event("RequestRemoveAccountFromGroup", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event REQUESTREMOVEFUNCTIONFROMGROUP_EVENT = new Event("RequestRemoveFunctionFromGroup", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event CREATEGROUP_EVENT = new Event("CreateGroup", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Uint8>() {}));
    ;

    public static final Event ADDACCOUNTTOGROUP_EVENT = new Event("AddAccountToGroup", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event ADDFUNCTIONTOGROUP_EVENT = new Event("AddFunctionToGroup", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event REMOVEACCOUNTFROMGROUP_EVENT = new Event("RemoveAccountFromGroup", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event REMOVEFUNCTIONFROMGROUP_EVENT = new Event("RemoveFunctionFromGroup", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event INITWEIGHTDATA_EVENT = new Event("InitWeightData", 
            Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Address>>() {}, new TypeReference<DynamicArray<Uint16>>() {}, new TypeReference<Uint16>() {}));
    ;

    public static final Event REQUESTSETTHRESHOLD_EVENT = new Event("RequestSetThreshold", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint16>() {}));
    ;

    public static final Event EXECUTESETTHRESHOLD_EVENT = new Event("ExecuteSetThreshold", 
            Arrays.<TypeReference<?>>asList());
    ;

    public static final Event REQUESTRESETGOVERNORS_EVENT = new Event("RequestResetGovernors", 
            Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Address>>() {}, new TypeReference<DynamicArray<Uint16>>() {}));
    ;

    public static final Event EXECUTERESETGOVERNACCOUNTS_EVENT = new Event("ExecuteResetGovernAccounts", 
            Arrays.<TypeReference<?>>asList());
    ;

    public static final Event REQUESTADDGOVERNOR_EVENT = new Event("RequestAddGovernor", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}));
    ;

    public static final Event DELETEADDGOVERNORREQ_EVENT = new Event("DeleteAddGovernorReq", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
    ;

    public static final Event APPROVEADDGOVERNORREQ_EVENT = new Event("ApproveAddGovernorReq", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
    ;

    public static final Event EXECUTEADDGOVERNORREQ_EVENT = new Event("ExecuteAddGovernorReq", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
    ;

    public static final Event REQUESTREMOVEGOVERNOR_EVENT = new Event("RequestRemoveGovernor", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
    ;

    public static final Event DELETEREMOVEGOVERNORREQ_EVENT = new Event("DeleteRemoveGovernorReq", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
    ;

    public static final Event APPROVEREMOVEGOVERNORREQ_EVENT = new Event("ApproveRemoveGovernorReq", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
    ;

    public static final Event EXECUTEREMOVEGOVERNORREQ_EVENT = new Event("ExecuteRemoveGovernorReq", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
    ;

    public static final Event APPROVESINGLE_EVENT = new Event("ApproveSingle", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint8>(true) {}));
    ;

    public static final Event DELETESINGLE_EVENT = new Event("DeleteSingle", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint8>() {}));
    ;

    public static final Event LOGSETVOTEWEIGHT_EVENT = new Event("LogSetVoteWeight", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Address>() {}));
    ;

    public static final Event LOGREGISTER_EVENT = new Event("LogRegister", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>(true) {}, new TypeReference<Uint8>(true) {}, new TypeReference<Address>(true) {}, new TypeReference<Uint16>() {}, new TypeReference<Address>() {}));
    ;

    public static final Event LOGUNREGISTER_EVENT = new Event("LogUnregister", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>(true) {}, new TypeReference<Bool>(true) {}, new TypeReference<Address>() {}));
    ;

    public static final Event LOGAPPROVE_EVENT = new Event("LogApprove", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>(true) {}, new TypeReference<Address>(true) {}, new TypeReference<Bool>() {}, new TypeReference<Address>() {}));
    ;

    public static final Event LOGUNAPPROVE_EVENT = new Event("LogUnapprove", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>(true) {}, new TypeReference<Address>(true) {}, new TypeReference<Bool>() {}, new TypeReference<Address>() {}));
    ;

    public static final Event LOGCANCALL_EVENT = new Event("LogCanCall", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>(true) {}, new TypeReference<Address>(true) {}, new TypeReference<Address>() {}));
    ;

    public static final Event TRANSFERADMINAUTH_EVENT = new Event("TransferAdminAuth", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Address>(true) {}));
    ;

    protected AuthManager(String contractAddress, Client client, CryptoKeyPair credential) {
        super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
    }

    public static String getBinary(CryptoSuite cryptoSuite) {
        return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
    }

    public TransactionReceipt approveRemoveGovernorReq(String account) {
        final Function function = new Function(
                FUNC_APPROVEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void approveRemoveGovernorReq(String account, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_APPROVEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForApproveRemoveGovernorReq(String account) {
        final Function function = new Function(
                FUNC_APPROVEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getApproveRemoveGovernorReqInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_APPROVEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public TransactionReceipt requestAddGovernor(String account) {
        final Function function = new Function(
                FUNC_REQUESTADDGOVERNOR, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void requestAddGovernor(String account, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REQUESTADDGOVERNOR, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRequestAddGovernor(String account) {
        final Function function = new Function(
                FUNC_REQUESTADDGOVERNOR, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getRequestAddGovernorInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REQUESTADDGOVERNOR, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public Tuple7<BigInteger, String, BigInteger, String, BigInteger, BigInteger, BigInteger> getRequestInfo(BigInteger id) throws ContractException {
        final Function function = new Function(FUNC_GETREQUESTINFO, 
                Arrays.<Type>asList(new Uint256(id)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Address>() {}, new TypeReference<Uint16>() {}, new TypeReference<Address>() {}, new TypeReference<Uint16>() {}, new TypeReference<Uint8>() {}, new TypeReference<Uint8>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple7<BigInteger, String, BigInteger, String, BigInteger, BigInteger, BigInteger>(
                (BigInteger) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (BigInteger) results.get(2).getValue(), 
                (String) results.get(3).getValue(), 
                (BigInteger) results.get(4).getValue(), 
                (BigInteger) results.get(5).getValue(), 
                (BigInteger) results.get(6).getValue());
    }

    public TransactionReceipt executeRemoveFunctionFromGroup() {
        final Function function = new Function(
                FUNC_EXECUTEREMOVEFUNCTIONFROMGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void executeRemoveFunctionFromGroup(TransactionCallback callback) {
        final Function function = new Function(
                FUNC_EXECUTEREMOVEFUNCTIONFROMGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForExecuteRemoveFunctionFromGroup() {
        final Function function = new Function(
                FUNC_EXECUTEREMOVEFUNCTIONFROMGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple3<String, String, String> viewRemoveFunctionToGroup() throws ContractException {
        final Function function = new Function(FUNC_VIEWREMOVEFUNCTIONTOGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple3<String, String, String>(
                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue());
    }

    public Tuple3<List<String>, List<BigInteger>, BigInteger> getGovs() throws ContractException {
        final Function function = new Function(FUNC_GETGOVS, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Address>>() {}, new TypeReference<DynamicArray<Uint16>>() {}, new TypeReference<Uint16>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple3<List<String>, List<BigInteger>, BigInteger>(
                convertToNative((List<Address>) results.get(0).getValue()), 
                convertToNative((List<Uint16>) results.get(1).getValue()), 
                (BigInteger) results.get(2).getValue());
    }

    public Tuple3<String, String, String> viewAddFunctionToGroup() throws ContractException {
        final Function function = new Function(FUNC_VIEWADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple3<String, String, String>(
                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue());
    }

    public TransactionReceipt approveAddGovernorReq(String account) {
        final Function function = new Function(
                FUNC_APPROVEADDGOVERNORREQ, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void approveAddGovernorReq(String account, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_APPROVEADDGOVERNORREQ, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForApproveAddGovernorReq(String account) {
        final Function function = new Function(
                FUNC_APPROVEADDGOVERNORREQ, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getApproveAddGovernorReqInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_APPROVEADDGOVERNORREQ, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public TransactionReceipt executeRemoveGovernorReq(String account) {
        final Function function = new Function(
                FUNC_EXECUTEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void executeRemoveGovernorReq(String account, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_EXECUTEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForExecuteRemoveGovernorReq(String account) {
        final Function function = new Function(
                FUNC_EXECUTEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getExecuteRemoveGovernorReqInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_EXECUTEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public Boolean containsFunction(String group, String contractAddr, String func) throws ContractException {
        final Function function = new Function(FUNC_CONTAINSFUNCTION, 
                Arrays.<Type>asList(new Utf8String(group),
                new Address(contractAddr),
                new Utf8String(func)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeCallWithSingleValueReturn(function, Boolean.class);
    }

    public String _voteWeight() throws ContractException {
        final Function function = new Function(FUNC__VOTEWEIGHT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public TransactionReceipt removeFunctionFromGroup(String contractAddr, String func, String group) {
        final Function function = new Function(
                FUNC_REMOVEFUNCTIONFROMGROUP, 
                Arrays.<Type>asList(new Address(contractAddr),
                new Utf8String(func),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void removeFunctionFromGroup(String contractAddr, String func, String group, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REMOVEFUNCTIONFROMGROUP, 
                Arrays.<Type>asList(new Address(contractAddr),
                new Utf8String(func),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRemoveFunctionFromGroup(String contractAddr, String func, String group) {
        final Function function = new Function(
                FUNC_REMOVEFUNCTIONFROMGROUP, 
                Arrays.<Type>asList(new Address(contractAddr),
                new Utf8String(func),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple3<String, String, String> getRemoveFunctionFromGroupInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REMOVEFUNCTIONFROMGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple3<String, String, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue()
                );
    }

    public TransactionReceipt deleteSingle(BigInteger txType) {
        final Function function = new Function(
                FUNC_DELETESINGLE, 
                Arrays.<Type>asList(new Uint8(txType)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void deleteSingle(BigInteger txType, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_DELETESINGLE, 
                Arrays.<Type>asList(new Uint8(txType)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForDeleteSingle(BigInteger txType) {
        final Function function = new Function(
                FUNC_DELETESINGLE, 
                Arrays.<Type>asList(new Uint8(txType)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<BigInteger> getDeleteSingleInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_DELETESINGLE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint8>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public TransactionReceipt deleteAddGovernorReq(String account) {
        final Function function = new Function(
                FUNC_DELETEADDGOVERNORREQ, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void deleteAddGovernorReq(String account, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_DELETEADDGOVERNORREQ, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForDeleteAddGovernorReq(String account) {
        final Function function = new Function(
                FUNC_DELETEADDGOVERNORREQ, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getDeleteAddGovernorReqInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_DELETEADDGOVERNORREQ, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public TransactionReceipt requestRemoveFunctionFromGroup(String contractAddr, String func, String group) {
        final Function function = new Function(
                FUNC_REQUESTREMOVEFUNCTIONFROMGROUP, 
                Arrays.<Type>asList(new Address(contractAddr),
                new Utf8String(func),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void requestRemoveFunctionFromGroup(String contractAddr, String func, String group, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REQUESTREMOVEFUNCTIONFROMGROUP, 
                Arrays.<Type>asList(new Address(contractAddr),
                new Utf8String(func),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRequestRemoveFunctionFromGroup(String contractAddr, String func, String group) {
        final Function function = new Function(
                FUNC_REQUESTREMOVEFUNCTIONFROMGROUP, 
                Arrays.<Type>asList(new Address(contractAddr),
                new Utf8String(func),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple3<String, String, String> getRequestRemoveFunctionFromGroupInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REQUESTREMOVEFUNCTIONFROMGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple3<String, String, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue()
                );
    }

    public Tuple2<String, BigInteger> viewCreateGroup() throws ContractException {
        final Function function = new Function(FUNC_VIEWCREATEGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Uint8>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple2<String, BigInteger>(
                (String) results.get(0).getValue(), 
                (BigInteger) results.get(1).getValue());
    }

    public List getGovernorsToRemove() throws ContractException {
        final Function function = new Function(FUNC_GETGOVERNORSTOREMOVE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Address>>() {}));
        List<Type> result = (List<Type>) executeCallWithSingleValueReturn(function, List.class);
        return convertToNative(result);
    }

    public TransactionReceipt requestRemoveAccountFromGroup(String account, String group) {
        final Function function = new Function(
                FUNC_REQUESTREMOVEACCOUNTFROMGROUP, 
                Arrays.<Type>asList(new Address(account),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void requestRemoveAccountFromGroup(String account, String group, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REQUESTREMOVEACCOUNTFROMGROUP, 
                Arrays.<Type>asList(new Address(account),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRequestRemoveAccountFromGroup(String account, String group) {
        final Function function = new Function(
                FUNC_REQUESTREMOVEACCOUNTFROMGROUP, 
                Arrays.<Type>asList(new Address(account),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, String> getRequestRemoveAccountFromGroupInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REQUESTREMOVEACCOUNTFROMGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue()
                );
    }

    public Tuple2<String, String> viewAddAccountToGroup() throws ContractException {
        final Function function = new Function(FUNC_VIEWADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple2<String, String>(
                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue());
    }

    public TransactionReceipt executeRemoveAccountFromGroup() {
        final Function function = new Function(
                FUNC_EXECUTEREMOVEACCOUNTFROMGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void executeRemoveAccountFromGroup(TransactionCallback callback) {
        final Function function = new Function(
                FUNC_EXECUTEREMOVEACCOUNTFROMGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForExecuteRemoveAccountFromGroup() {
        final Function function = new Function(
                FUNC_EXECUTEREMOVEACCOUNTFROMGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public String getAdmin() throws ContractException {
        final Function function = new Function(FUNC_GETADMIN, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public Boolean inGovs() throws ContractException {
        final Function function = new Function(FUNC_INGOVS, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeCallWithSingleValueReturn(function, Boolean.class);
    }

    public TransactionReceipt requestAddAccountToGroup(String account, String group) {
        final Function function = new Function(
                FUNC_REQUESTADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(new Address(account),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void requestAddAccountToGroup(String account, String group, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REQUESTADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(new Address(account),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRequestAddAccountToGroup(String account, String group) {
        final Function function = new Function(
                FUNC_REQUESTADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(new Address(account),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, String> getRequestAddAccountToGroupInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REQUESTADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue()
                );
    }

    public Tuple7<BigInteger, String, BigInteger, String, BigInteger, BigInteger, BigInteger> getRemoveGovRequest(String account) throws ContractException {
        final Function function = new Function(FUNC_GETREMOVEGOVREQUEST, 
                Arrays.<Type>asList(new Address(account)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Address>() {}, new TypeReference<Uint16>() {}, new TypeReference<Address>() {}, new TypeReference<Uint16>() {}, new TypeReference<Uint8>() {}, new TypeReference<Uint8>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple7<BigInteger, String, BigInteger, String, BigInteger, BigInteger, BigInteger>(
                (BigInteger) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (BigInteger) results.get(2).getValue(), 
                (String) results.get(3).getValue(), 
                (BigInteger) results.get(4).getValue(), 
                (BigInteger) results.get(5).getValue(), 
                (BigInteger) results.get(6).getValue());
    }

    public TransactionReceipt executeSetThreshold() {
        final Function function = new Function(
                FUNC_EXECUTESETTHRESHOLD, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void executeSetThreshold(TransactionCallback callback) {
        final Function function = new Function(
                FUNC_EXECUTESETTHRESHOLD, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForExecuteSetThreshold() {
        final Function function = new Function(
                FUNC_EXECUTESETTHRESHOLD, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public BigInteger opMode() throws ContractException {
        final Function function = new Function(FUNC_OPMODE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public TransactionReceipt executeCreateGroup() {
        final Function function = new Function(
                FUNC_EXECUTECREATEGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void executeCreateGroup(TransactionCallback callback) {
        final Function function = new Function(
                FUNC_EXECUTECREATEGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForExecuteCreateGroup() {
        final Function function = new Function(
                FUNC_EXECUTECREATEGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public TransactionReceipt executeResetGovernAccounts() {
        final Function function = new Function(
                FUNC_EXECUTERESETGOVERNACCOUNTS, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void executeResetGovernAccounts(TransactionCallback callback) {
        final Function function = new Function(
                FUNC_EXECUTERESETGOVERNACCOUNTS, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForExecuteResetGovernAccounts() {
        final Function function = new Function(
                FUNC_EXECUTERESETGOVERNACCOUNTS, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, String> viewRemoveAccountToGroup() throws ContractException {
        final Function function = new Function(FUNC_VIEWREMOVEACCOUNTTOGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple2<String, String>(
                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue());
    }

    public TransactionReceipt approveSingle(BigInteger txType) {
        final Function function = new Function(
                FUNC_APPROVESINGLE, 
                Arrays.<Type>asList(new Uint8(txType)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void approveSingle(BigInteger txType, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_APPROVESINGLE, 
                Arrays.<Type>asList(new Uint8(txType)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForApproveSingle(BigInteger txType) {
        final Function function = new Function(
                FUNC_APPROVESINGLE, 
                Arrays.<Type>asList(new Uint8(txType)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<BigInteger> getApproveSingleInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_APPROVESINGLE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint8>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public Boolean containsAccount(String group, String account) throws ContractException {
        final Function function = new Function(FUNC_CONTAINSACCOUNT, 
                Arrays.<Type>asList(new Utf8String(group),
                new Address(account)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeCallWithSingleValueReturn(function, Boolean.class);
    }

    public TransactionReceipt executeAddGovernorReq(String account) {
        final Function function = new Function(
                FUNC_EXECUTEADDGOVERNORREQ, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void executeAddGovernorReq(String account, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_EXECUTEADDGOVERNORREQ, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForExecuteAddGovernorReq(String account) {
        final Function function = new Function(
                FUNC_EXECUTEADDGOVERNORREQ, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getExecuteAddGovernorReqInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_EXECUTEADDGOVERNORREQ, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public Tuple3<BigInteger, BigInteger, BigInteger> getGroup(String group) throws ContractException {
        final Function function = new Function(FUNC_GETGROUP, 
                Arrays.<Type>asList(new Utf8String(group)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint8>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple3<BigInteger, BigInteger, BigInteger>(
                (BigInteger) results.get(0).getValue(), 
                (BigInteger) results.get(1).getValue(), 
                (BigInteger) results.get(2).getValue());
    }

    public Tuple2<BigInteger, BigInteger> getWeight(String who) throws ContractException {
        final Function function = new Function(FUNC_GETWEIGHT, 
                Arrays.<Type>asList(new Address(who)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint16>() {}, new TypeReference<Uint16>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple2<BigInteger, BigInteger>(
                (BigInteger) results.get(0).getValue(), 
                (BigInteger) results.get(1).getValue());
    }

    public TransactionReceipt executeAddAccountToGroup() {
        final Function function = new Function(
                FUNC_EXECUTEADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void executeAddAccountToGroup(TransactionCallback callback) {
        final Function function = new Function(
                FUNC_EXECUTEADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForExecuteAddAccountToGroup() {
        final Function function = new Function(
                FUNC_EXECUTEADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Boolean canCallFunction(String contractAddr, byte[] sig, String caller) throws ContractException {
        final Function function = new Function(FUNC_CANCALLFUNCTION, 
                Arrays.<Type>asList(new Address(contractAddr),
                new org.fisco.bcos.sdk.abi.datatypes.generated.Bytes4(sig), 
                new Address(caller)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeCallWithSingleValueReturn(function, Boolean.class);
    }

    public TransactionReceipt removeAccountFromGroup(String account, String group) {
        final Function function = new Function(
                FUNC_REMOVEACCOUNTFROMGROUP, 
                Arrays.<Type>asList(new Address(account),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void removeAccountFromGroup(String account, String group, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REMOVEACCOUNTFROMGROUP, 
                Arrays.<Type>asList(new Address(account),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRemoveAccountFromGroup(String account, String group) {
        final Function function = new Function(
                FUNC_REMOVEACCOUNTFROMGROUP, 
                Arrays.<Type>asList(new Address(account),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, String> getRemoveAccountFromGroupInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REMOVEACCOUNTFROMGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue()
                );
    }

    public TransactionReceipt transferAdminAuth(String newAdminAddr) {
        final Function function = new Function(
                FUNC_TRANSFERADMINAUTH, 
                Arrays.<Type>asList(new Address(newAdminAddr)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void transferAdminAuth(String newAdminAddr, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_TRANSFERADMINAUTH, 
                Arrays.<Type>asList(new Address(newAdminAddr)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForTransferAdminAuth(String newAdminAddr) {
        final Function function = new Function(
                FUNC_TRANSFERADMINAUTH, 
                Arrays.<Type>asList(new Address(newAdminAddr)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getTransferAdminAuthInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_TRANSFERADMINAUTH, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public Boolean isAdmin() throws ContractException {
        final Function function = new Function(FUNC_ISADMIN, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeCallWithSingleValueReturn(function, Boolean.class);
    }

    public TransactionReceipt addFunctionToGroup(String contractAddr, String func, String group) {
        final Function function = new Function(
                FUNC_ADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(new Address(contractAddr),
                new Utf8String(func),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void addFunctionToGroup(String contractAddr, String func, String group, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_ADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(new Address(contractAddr),
                new Utf8String(func),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForAddFunctionToGroup(String contractAddr, String func, String group) {
        final Function function = new Function(
                FUNC_ADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(new Address(contractAddr),
                new Utf8String(func),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple3<String, String, String> getAddFunctionToGroupInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_ADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple3<String, String, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue()
                );
    }

    public Tuple2<BigInteger, String> getRequestTxType(BigInteger id) throws ContractException {
        final Function function = new Function(FUNC_GETREQUESTTXTYPE, 
                Arrays.<Type>asList(new Uint256(id)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint8>() {}, new TypeReference<Address>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple2<BigInteger, String>(
                (BigInteger) results.get(0).getValue(), 
                (String) results.get(1).getValue());
    }

    public TransactionReceipt createGroup(String group, BigInteger mode) {
        final Function function = new Function(
                FUNC_CREATEGROUP, 
                Arrays.<Type>asList(new Utf8String(group),
                new Uint8(mode)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void createGroup(String group, BigInteger mode, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_CREATEGROUP, 
                Arrays.<Type>asList(new Utf8String(group),
                new Uint8(mode)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForCreateGroup(String group, BigInteger mode) {
        final Function function = new Function(
                FUNC_CREATEGROUP, 
                Arrays.<Type>asList(new Utf8String(group),
                new Uint8(mode)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, BigInteger> getCreateGroupInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_CREATEGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Uint8>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, BigInteger>(

                (String) results.get(0).getValue(), 
                (BigInteger) results.get(1).getValue()
                );
    }

    public TransactionReceipt requestResetGovernors(List<String> governors, List<BigInteger> weights) {
        final Function function = new Function(
                FUNC_REQUESTRESETGOVERNORS, 
                Arrays.<Type>asList(governors.isEmpty()? DynamicArray.empty("address[]"):new DynamicArray<Address>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(governors, Address.class)),
                weights.isEmpty()? DynamicArray.empty("uint16[]"):new DynamicArray<Uint16>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(weights, Uint16.class))),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void requestResetGovernors(List<String> governors, List<BigInteger> weights, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REQUESTRESETGOVERNORS, 
                Arrays.<Type>asList(governors.isEmpty()? DynamicArray.empty("address[]"):new DynamicArray<Address>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(governors, Address.class)),
                weights.isEmpty()? DynamicArray.empty("uint16[]"):new DynamicArray<Uint16>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(weights, Uint16.class))),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRequestResetGovernors(List<String> governors, List<BigInteger> weights) {
        final Function function = new Function(
                FUNC_REQUESTRESETGOVERNORS, 
                Arrays.<Type>asList(governors.isEmpty()? DynamicArray.empty("address[]"):new DynamicArray<Address>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(governors, Address.class)),
                weights.isEmpty()? DynamicArray.empty("uint16[]"):new DynamicArray<Uint16>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(weights, Uint16.class))),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<List<String>, List<BigInteger>> getRequestResetGovernorsInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REQUESTRESETGOVERNORS, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Address>>() {}, new TypeReference<DynamicArray<Uint16>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<List<String>, List<BigInteger>>(

                convertToNative((List<Address>) results.get(0).getValue()), 
                convertToNative((List<Uint16>) results.get(1).getValue())
                );
    }

    public TransactionReceipt deleteRemoveGovernorReq(String account) {
        final Function function = new Function(
                FUNC_DELETEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void deleteRemoveGovernorReq(String account, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_DELETEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForDeleteRemoveGovernorReq(String account) {
        final Function function = new Function(
                FUNC_DELETEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getDeleteRemoveGovernorReqInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_DELETEREMOVEGOVERNORREQ, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public TransactionReceipt executeAddFunctionToGroup() {
        final Function function = new Function(
                FUNC_EXECUTEADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void executeAddFunctionToGroup(TransactionCallback callback) {
        final Function function = new Function(
                FUNC_EXECUTEADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForExecuteAddFunctionToGroup() {
        final Function function = new Function(
                FUNC_EXECUTEADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public String getVoteWeight() throws ContractException {
        final Function function = new Function(FUNC_GETVOTEWEIGHT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public Tuple7<BigInteger, String, BigInteger, String, BigInteger, BigInteger, BigInteger> getRequestSingle(BigInteger txType) throws ContractException {
        final Function function = new Function(FUNC_GETREQUESTSINGLE, 
                Arrays.<Type>asList(new Uint8(txType)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Address>() {}, new TypeReference<Uint16>() {}, new TypeReference<Address>() {}, new TypeReference<Uint16>() {}, new TypeReference<Uint8>() {}, new TypeReference<Uint8>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple7<BigInteger, String, BigInteger, String, BigInteger, BigInteger, BigInteger>(
                (BigInteger) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (BigInteger) results.get(2).getValue(), 
                (String) results.get(3).getValue(), 
                (BigInteger) results.get(4).getValue(), 
                (BigInteger) results.get(5).getValue(), 
                (BigInteger) results.get(6).getValue());
    }

    public Tuple7<BigInteger, String, BigInteger, String, BigInteger, BigInteger, BigInteger> getAddGovRequest(String account) throws ContractException {
        final Function function = new Function(FUNC_GETADDGOVREQUEST, 
                Arrays.<Type>asList(new Address(account)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Address>() {}, new TypeReference<Uint16>() {}, new TypeReference<Address>() {}, new TypeReference<Uint16>() {}, new TypeReference<Uint8>() {}, new TypeReference<Uint8>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple7<BigInteger, String, BigInteger, String, BigInteger, BigInteger, BigInteger>(
                (BigInteger) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (BigInteger) results.get(2).getValue(), 
                (String) results.get(3).getValue(), 
                (BigInteger) results.get(4).getValue(), 
                (BigInteger) results.get(5).getValue(), 
                (BigInteger) results.get(6).getValue());
    }

    public TransactionReceipt requestAddFunctionToGroup(String contractAddr, String func, String group) {
        final Function function = new Function(
                FUNC_REQUESTADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(new Address(contractAddr),
                new Utf8String(func),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void requestAddFunctionToGroup(String contractAddr, String func, String group, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REQUESTADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(new Address(contractAddr),
                new Utf8String(func),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRequestAddFunctionToGroup(String contractAddr, String func, String group) {
        final Function function = new Function(
                FUNC_REQUESTADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(new Address(contractAddr),
                new Utf8String(func),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple3<String, String, String> getRequestAddFunctionToGroupInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REQUESTADDFUNCTIONTOGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple3<String, String, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue()
                );
    }

    public TransactionReceipt addAccountToGroup(String account, String group) {
        final Function function = new Function(
                FUNC_ADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(new Address(account),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void addAccountToGroup(String account, String group, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_ADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(new Address(account),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForAddAccountToGroup(String account, String group) {
        final Function function = new Function(
                FUNC_ADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(new Address(account),
                new Utf8String(group)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, String> getAddAccountToGroupInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_ADDACCOUNTTOGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue()
                );
    }

    public TransactionReceipt requestRemoveGovernor(String account) {
        final Function function = new Function(
                FUNC_REQUESTREMOVEGOVERNOR, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void requestRemoveGovernor(String account, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REQUESTREMOVEGOVERNOR, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRequestRemoveGovernor(String account) {
        final Function function = new Function(
                FUNC_REQUESTREMOVEGOVERNOR, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getRequestRemoveGovernorInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REQUESTREMOVEGOVERNOR, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public List getGovernorsToAdd() throws ContractException {
        final Function function = new Function(FUNC_GETGOVERNORSTOADD, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Address>>() {}));
        List<Type> result = (List<Type>) executeCallWithSingleValueReturn(function, List.class);
        return convertToNative(result);
    }

    public TransactionReceipt requestCreateGroup(String group, BigInteger mode) {
        final Function function = new Function(
                FUNC_REQUESTCREATEGROUP, 
                Arrays.<Type>asList(new Utf8String(group),
                new Uint8(mode)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void requestCreateGroup(String group, BigInteger mode, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REQUESTCREATEGROUP, 
                Arrays.<Type>asList(new Utf8String(group),
                new Uint8(mode)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRequestCreateGroup(String group, BigInteger mode) {
        final Function function = new Function(
                FUNC_REQUESTCREATEGROUP, 
                Arrays.<Type>asList(new Utf8String(group),
                new Uint8(mode)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, BigInteger> getRequestCreateGroupInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REQUESTCREATEGROUP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Uint8>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, BigInteger>(

                (String) results.get(0).getValue(), 
                (BigInteger) results.get(1).getValue()
                );
    }

    public TransactionReceipt requestSetThreshold(BigInteger newThreshold) {
        final Function function = new Function(
                FUNC_REQUESTSETTHRESHOLD, 
                Arrays.<Type>asList(new Uint16(newThreshold)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void requestSetThreshold(BigInteger newThreshold, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REQUESTSETTHRESHOLD, 
                Arrays.<Type>asList(new Uint16(newThreshold)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRequestSetThreshold(BigInteger newThreshold) {
        final Function function = new Function(
                FUNC_REQUESTSETTHRESHOLD, 
                Arrays.<Type>asList(new Uint16(newThreshold)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<BigInteger> getRequestSetThresholdInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REQUESTSETTHRESHOLD, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint16>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public List<RequestCreateGroupEventResponse> getRequestCreateGroupEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(REQUESTCREATEGROUP_EVENT, transactionReceipt);
        ArrayList<RequestCreateGroupEventResponse> responses = new ArrayList<RequestCreateGroupEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            RequestCreateGroupEventResponse typedResponse = new RequestCreateGroupEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.group = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.mode = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeRequestCreateGroupEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTCREATEGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeRequestCreateGroupEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTCREATEGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<RequestAddAccountToGroupEventResponse> getRequestAddAccountToGroupEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(REQUESTADDACCOUNTTOGROUP_EVENT, transactionReceipt);
        ArrayList<RequestAddAccountToGroupEventResponse> responses = new ArrayList<RequestAddAccountToGroupEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            RequestAddAccountToGroupEventResponse typedResponse = new RequestAddAccountToGroupEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.group = (String) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeRequestAddAccountToGroupEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTADDACCOUNTTOGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeRequestAddAccountToGroupEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTADDACCOUNTTOGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<RequestAddFunctionToGroupEventResponse> getRequestAddFunctionToGroupEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(REQUESTADDFUNCTIONTOGROUP_EVENT, transactionReceipt);
        ArrayList<RequestAddFunctionToGroupEventResponse> responses = new ArrayList<RequestAddFunctionToGroupEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            RequestAddFunctionToGroupEventResponse typedResponse = new RequestAddFunctionToGroupEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.contractAddr = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.func = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.group = (String) eventValues.getNonIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeRequestAddFunctionToGroupEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTADDFUNCTIONTOGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeRequestAddFunctionToGroupEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTADDFUNCTIONTOGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<RequestRemoveAccountFromGroupEventResponse> getRequestRemoveAccountFromGroupEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(REQUESTREMOVEACCOUNTFROMGROUP_EVENT, transactionReceipt);
        ArrayList<RequestRemoveAccountFromGroupEventResponse> responses = new ArrayList<RequestRemoveAccountFromGroupEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            RequestRemoveAccountFromGroupEventResponse typedResponse = new RequestRemoveAccountFromGroupEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.group = (String) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeRequestRemoveAccountFromGroupEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTREMOVEACCOUNTFROMGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeRequestRemoveAccountFromGroupEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTREMOVEACCOUNTFROMGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<RequestRemoveFunctionFromGroupEventResponse> getRequestRemoveFunctionFromGroupEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(REQUESTREMOVEFUNCTIONFROMGROUP_EVENT, transactionReceipt);
        ArrayList<RequestRemoveFunctionFromGroupEventResponse> responses = new ArrayList<RequestRemoveFunctionFromGroupEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            RequestRemoveFunctionFromGroupEventResponse typedResponse = new RequestRemoveFunctionFromGroupEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.contractAddr = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.func = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.group = (String) eventValues.getNonIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeRequestRemoveFunctionFromGroupEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTREMOVEFUNCTIONFROMGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeRequestRemoveFunctionFromGroupEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTREMOVEFUNCTIONFROMGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<CreateGroupEventResponse> getCreateGroupEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(CREATEGROUP_EVENT, transactionReceipt);
        ArrayList<CreateGroupEventResponse> responses = new ArrayList<CreateGroupEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            CreateGroupEventResponse typedResponse = new CreateGroupEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.group = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.mode = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeCreateGroupEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(CREATEGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeCreateGroupEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(CREATEGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<AddAccountToGroupEventResponse> getAddAccountToGroupEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(ADDACCOUNTTOGROUP_EVENT, transactionReceipt);
        ArrayList<AddAccountToGroupEventResponse> responses = new ArrayList<AddAccountToGroupEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            AddAccountToGroupEventResponse typedResponse = new AddAccountToGroupEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.group = (String) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeAddAccountToGroupEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(ADDACCOUNTTOGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeAddAccountToGroupEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(ADDACCOUNTTOGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<AddFunctionToGroupEventResponse> getAddFunctionToGroupEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(ADDFUNCTIONTOGROUP_EVENT, transactionReceipt);
        ArrayList<AddFunctionToGroupEventResponse> responses = new ArrayList<AddFunctionToGroupEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            AddFunctionToGroupEventResponse typedResponse = new AddFunctionToGroupEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.contractAddr = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.func = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.group = (String) eventValues.getNonIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeAddFunctionToGroupEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(ADDFUNCTIONTOGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeAddFunctionToGroupEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(ADDFUNCTIONTOGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<RemoveAccountFromGroupEventResponse> getRemoveAccountFromGroupEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(REMOVEACCOUNTFROMGROUP_EVENT, transactionReceipt);
        ArrayList<RemoveAccountFromGroupEventResponse> responses = new ArrayList<RemoveAccountFromGroupEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            RemoveAccountFromGroupEventResponse typedResponse = new RemoveAccountFromGroupEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.group = (String) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeRemoveAccountFromGroupEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(REMOVEACCOUNTFROMGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeRemoveAccountFromGroupEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(REMOVEACCOUNTFROMGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<RemoveFunctionFromGroupEventResponse> getRemoveFunctionFromGroupEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(REMOVEFUNCTIONFROMGROUP_EVENT, transactionReceipt);
        ArrayList<RemoveFunctionFromGroupEventResponse> responses = new ArrayList<RemoveFunctionFromGroupEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            RemoveFunctionFromGroupEventResponse typedResponse = new RemoveFunctionFromGroupEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.contractAddr = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.func = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.group = (String) eventValues.getNonIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeRemoveFunctionFromGroupEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(REMOVEFUNCTIONFROMGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeRemoveFunctionFromGroupEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(REMOVEFUNCTIONFROMGROUP_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<InitWeightDataEventResponse> getInitWeightDataEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(INITWEIGHTDATA_EVENT, transactionReceipt);
        ArrayList<InitWeightDataEventResponse> responses = new ArrayList<InitWeightDataEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            InitWeightDataEventResponse typedResponse = new InitWeightDataEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.accounts = (List<String>) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.weights = (List<BigInteger>) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.threshold = (BigInteger) eventValues.getNonIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeInitWeightDataEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(INITWEIGHTDATA_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeInitWeightDataEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(INITWEIGHTDATA_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<RequestSetThresholdEventResponse> getRequestSetThresholdEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(REQUESTSETTHRESHOLD_EVENT, transactionReceipt);
        ArrayList<RequestSetThresholdEventResponse> responses = new ArrayList<RequestSetThresholdEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            RequestSetThresholdEventResponse typedResponse = new RequestSetThresholdEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.threshold = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeRequestSetThresholdEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTSETTHRESHOLD_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeRequestSetThresholdEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTSETTHRESHOLD_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<ExecuteSetThresholdEventResponse> getExecuteSetThresholdEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(EXECUTESETTHRESHOLD_EVENT, transactionReceipt);
        ArrayList<ExecuteSetThresholdEventResponse> responses = new ArrayList<ExecuteSetThresholdEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            ExecuteSetThresholdEventResponse typedResponse = new ExecuteSetThresholdEventResponse();
            typedResponse.log = eventValues.getLog();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeExecuteSetThresholdEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(EXECUTESETTHRESHOLD_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeExecuteSetThresholdEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(EXECUTESETTHRESHOLD_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<RequestResetGovernorsEventResponse> getRequestResetGovernorsEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(REQUESTRESETGOVERNORS_EVENT, transactionReceipt);
        ArrayList<RequestResetGovernorsEventResponse> responses = new ArrayList<RequestResetGovernorsEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            RequestResetGovernorsEventResponse typedResponse = new RequestResetGovernorsEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.governors = (List<String>) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.weights = (List<BigInteger>) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeRequestResetGovernorsEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTRESETGOVERNORS_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeRequestResetGovernorsEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTRESETGOVERNORS_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<ExecuteResetGovernAccountsEventResponse> getExecuteResetGovernAccountsEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(EXECUTERESETGOVERNACCOUNTS_EVENT, transactionReceipt);
        ArrayList<ExecuteResetGovernAccountsEventResponse> responses = new ArrayList<ExecuteResetGovernAccountsEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            ExecuteResetGovernAccountsEventResponse typedResponse = new ExecuteResetGovernAccountsEventResponse();
            typedResponse.log = eventValues.getLog();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeExecuteResetGovernAccountsEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(EXECUTERESETGOVERNACCOUNTS_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeExecuteResetGovernAccountsEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(EXECUTERESETGOVERNACCOUNTS_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<RequestAddGovernorEventResponse> getRequestAddGovernorEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(REQUESTADDGOVERNOR_EVENT, transactionReceipt);
        ArrayList<RequestAddGovernorEventResponse> responses = new ArrayList<RequestAddGovernorEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            RequestAddGovernorEventResponse typedResponse = new RequestAddGovernorEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.reqId = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeRequestAddGovernorEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTADDGOVERNOR_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeRequestAddGovernorEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTADDGOVERNOR_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<DeleteAddGovernorReqEventResponse> getDeleteAddGovernorReqEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(DELETEADDGOVERNORREQ_EVENT, transactionReceipt);
        ArrayList<DeleteAddGovernorReqEventResponse> responses = new ArrayList<DeleteAddGovernorReqEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            DeleteAddGovernorReqEventResponse typedResponse = new DeleteAddGovernorReqEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeDeleteAddGovernorReqEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(DELETEADDGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeDeleteAddGovernorReqEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(DELETEADDGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<ApproveAddGovernorReqEventResponse> getApproveAddGovernorReqEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(APPROVEADDGOVERNORREQ_EVENT, transactionReceipt);
        ArrayList<ApproveAddGovernorReqEventResponse> responses = new ArrayList<ApproveAddGovernorReqEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            ApproveAddGovernorReqEventResponse typedResponse = new ApproveAddGovernorReqEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeApproveAddGovernorReqEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(APPROVEADDGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeApproveAddGovernorReqEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(APPROVEADDGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<ExecuteAddGovernorReqEventResponse> getExecuteAddGovernorReqEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(EXECUTEADDGOVERNORREQ_EVENT, transactionReceipt);
        ArrayList<ExecuteAddGovernorReqEventResponse> responses = new ArrayList<ExecuteAddGovernorReqEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            ExecuteAddGovernorReqEventResponse typedResponse = new ExecuteAddGovernorReqEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeExecuteAddGovernorReqEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(EXECUTEADDGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeExecuteAddGovernorReqEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(EXECUTEADDGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<RequestRemoveGovernorEventResponse> getRequestRemoveGovernorEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(REQUESTREMOVEGOVERNOR_EVENT, transactionReceipt);
        ArrayList<RequestRemoveGovernorEventResponse> responses = new ArrayList<RequestRemoveGovernorEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            RequestRemoveGovernorEventResponse typedResponse = new RequestRemoveGovernorEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeRequestRemoveGovernorEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTREMOVEGOVERNOR_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeRequestRemoveGovernorEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(REQUESTREMOVEGOVERNOR_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<DeleteRemoveGovernorReqEventResponse> getDeleteRemoveGovernorReqEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(DELETEREMOVEGOVERNORREQ_EVENT, transactionReceipt);
        ArrayList<DeleteRemoveGovernorReqEventResponse> responses = new ArrayList<DeleteRemoveGovernorReqEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            DeleteRemoveGovernorReqEventResponse typedResponse = new DeleteRemoveGovernorReqEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeDeleteRemoveGovernorReqEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(DELETEREMOVEGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeDeleteRemoveGovernorReqEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(DELETEREMOVEGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<ApproveRemoveGovernorReqEventResponse> getApproveRemoveGovernorReqEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(APPROVEREMOVEGOVERNORREQ_EVENT, transactionReceipt);
        ArrayList<ApproveRemoveGovernorReqEventResponse> responses = new ArrayList<ApproveRemoveGovernorReqEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            ApproveRemoveGovernorReqEventResponse typedResponse = new ApproveRemoveGovernorReqEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeApproveRemoveGovernorReqEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(APPROVEREMOVEGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeApproveRemoveGovernorReqEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(APPROVEREMOVEGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<ExecuteRemoveGovernorReqEventResponse> getExecuteRemoveGovernorReqEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(EXECUTEREMOVEGOVERNORREQ_EVENT, transactionReceipt);
        ArrayList<ExecuteRemoveGovernorReqEventResponse> responses = new ArrayList<ExecuteRemoveGovernorReqEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            ExecuteRemoveGovernorReqEventResponse typedResponse = new ExecuteRemoveGovernorReqEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeExecuteRemoveGovernorReqEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(EXECUTEREMOVEGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeExecuteRemoveGovernorReqEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(EXECUTEREMOVEGOVERNORREQ_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<ApproveSingleEventResponse> getApproveSingleEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(APPROVESINGLE_EVENT, transactionReceipt);
        ArrayList<ApproveSingleEventResponse> responses = new ArrayList<ApproveSingleEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            ApproveSingleEventResponse typedResponse = new ApproveSingleEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.txType = (BigInteger) eventValues.getIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeApproveSingleEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(APPROVESINGLE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeApproveSingleEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(APPROVESINGLE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<DeleteSingleEventResponse> getDeleteSingleEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(DELETESINGLE_EVENT, transactionReceipt);
        ArrayList<DeleteSingleEventResponse> responses = new ArrayList<DeleteSingleEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            DeleteSingleEventResponse typedResponse = new DeleteSingleEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.txType = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeDeleteSingleEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(DELETESINGLE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeDeleteSingleEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(DELETESINGLE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<LogSetVoteWeightEventResponse> getLogSetVoteWeightEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(LOGSETVOTEWEIGHT_EVENT, transactionReceipt);
        ArrayList<LogSetVoteWeightEventResponse> responses = new ArrayList<LogSetVoteWeightEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            LogSetVoteWeightEventResponse typedResponse = new LogSetVoteWeightEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.voteWeight = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.contractAddress = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeLogSetVoteWeightEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGSETVOTEWEIGHT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeLogSetVoteWeightEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGSETVOTEWEIGHT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<LogRegisterEventResponse> getLogRegisterEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(LOGREGISTER_EVENT, transactionReceipt);
        ArrayList<LogRegisterEventResponse> responses = new ArrayList<LogRegisterEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            LogRegisterEventResponse typedResponse = new LogRegisterEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.id = (BigInteger) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.txType = (BigInteger) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.requestAddress = (String) eventValues.getIndexedValues().get(2).getValue();
            typedResponse.threshold = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.contractAddress = (String) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeLogRegisterEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGREGISTER_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeLogRegisterEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGREGISTER_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<LogUnregisterEventResponse> getLogUnregisterEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(LOGUNREGISTER_EVENT, transactionReceipt);
        ArrayList<LogUnregisterEventResponse> responses = new ArrayList<LogUnregisterEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            LogUnregisterEventResponse typedResponse = new LogUnregisterEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.id = (BigInteger) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.result = (Boolean) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.contractAddress = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeLogUnregisterEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGUNREGISTER_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeLogUnregisterEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGUNREGISTER_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<LogApproveEventResponse> getLogApproveEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(LOGAPPROVE_EVENT, transactionReceipt);
        ArrayList<LogApproveEventResponse> responses = new ArrayList<LogApproveEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            LogApproveEventResponse typedResponse = new LogApproveEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.id = (BigInteger) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.who = (String) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.b = (Boolean) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.contractAddress = (String) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeLogApproveEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGAPPROVE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeLogApproveEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGAPPROVE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<LogUnapproveEventResponse> getLogUnapproveEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(LOGUNAPPROVE_EVENT, transactionReceipt);
        ArrayList<LogUnapproveEventResponse> responses = new ArrayList<LogUnapproveEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            LogUnapproveEventResponse typedResponse = new LogUnapproveEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.id = (BigInteger) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.who = (String) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.b = (Boolean) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.contractAddress = (String) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeLogUnapproveEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGUNAPPROVE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeLogUnapproveEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGUNAPPROVE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<LogCanCallEventResponse> getLogCanCallEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(LOGCANCALL_EVENT, transactionReceipt);
        ArrayList<LogCanCallEventResponse> responses = new ArrayList<LogCanCallEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            LogCanCallEventResponse typedResponse = new LogCanCallEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.id = (BigInteger) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.requestAddress = (String) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.contractAddress = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeLogCanCallEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGCANCALL_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeLogCanCallEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(LOGCANCALL_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<TransferAdminAuthEventResponse> getTransferAdminAuthEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(TRANSFERADMINAUTH_EVENT, transactionReceipt);
        ArrayList<TransferAdminAuthEventResponse> responses = new ArrayList<TransferAdminAuthEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            TransferAdminAuthEventResponse typedResponse = new TransferAdminAuthEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.oldAdmin = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.newAdmin = (String) eventValues.getIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeTransferAdminAuthEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(TRANSFERADMINAUTH_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeTransferAdminAuthEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(TRANSFERADMINAUTH_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public static AuthManager load(String contractAddress, Client client, CryptoKeyPair credential) {
        return new AuthManager(contractAddress, client, credential);
    }

    public static AuthManager deploy(Client client, CryptoKeyPair credential, BigInteger mode, List<String> accounts, List<BigInteger> weights, BigInteger threshold) throws ContractException {
        String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.<Type>asList(new Uint256(mode),
                accounts.isEmpty()? DynamicArray.empty("address[]"):new DynamicArray<Address>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(accounts, Address.class)),
                weights.isEmpty()? DynamicArray.empty("uint16[]"):new DynamicArray<Uint16>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(weights, Uint16.class)),
                new Uint16(threshold)));
        return deploy(AuthManager.class, client, credential, getBinary(client.getCryptoSuite()), encodedConstructor);
    }

    public static class RequestCreateGroupEventResponse {
        public TransactionReceipt.Logs log;

        public String group;

        public BigInteger mode;
    }

    public static class RequestAddAccountToGroupEventResponse {
        public TransactionReceipt.Logs log;

        public String account;

        public String group;
    }

    public static class RequestAddFunctionToGroupEventResponse {
        public TransactionReceipt.Logs log;

        public String contractAddr;

        public String func;

        public String group;
    }

    public static class RequestRemoveAccountFromGroupEventResponse {
        public TransactionReceipt.Logs log;

        public String account;

        public String group;
    }

    public static class RequestRemoveFunctionFromGroupEventResponse {
        public TransactionReceipt.Logs log;

        public String contractAddr;

        public String func;

        public String group;
    }

    public static class CreateGroupEventResponse {
        public TransactionReceipt.Logs log;

        public String group;

        public BigInteger mode;
    }

    public static class AddAccountToGroupEventResponse {
        public TransactionReceipt.Logs log;

        public String account;

        public String group;
    }

    public static class AddFunctionToGroupEventResponse {
        public TransactionReceipt.Logs log;

        public String contractAddr;

        public String func;

        public String group;
    }

    public static class RemoveAccountFromGroupEventResponse {
        public TransactionReceipt.Logs log;

        public String account;

        public String group;
    }

    public static class RemoveFunctionFromGroupEventResponse {
        public TransactionReceipt.Logs log;

        public String contractAddr;

        public String func;

        public String group;
    }

    public static class InitWeightDataEventResponse {
        public TransactionReceipt.Logs log;

        public List<String> accounts;

        public List<BigInteger> weights;

        public BigInteger threshold;
    }

    public static class RequestSetThresholdEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger threshold;
    }

    public static class ExecuteSetThresholdEventResponse {
        public TransactionReceipt.Logs log;
    }

    public static class RequestResetGovernorsEventResponse {
        public TransactionReceipt.Logs log;

        public List<String> governors;

        public List<BigInteger> weights;
    }

    public static class ExecuteResetGovernAccountsEventResponse {
        public TransactionReceipt.Logs log;
    }

    public static class RequestAddGovernorEventResponse {
        public TransactionReceipt.Logs log;

        public String account;

        public BigInteger reqId;
    }

    public static class DeleteAddGovernorReqEventResponse {
        public TransactionReceipt.Logs log;

        public String account;
    }

    public static class ApproveAddGovernorReqEventResponse {
        public TransactionReceipt.Logs log;

        public String account;
    }

    public static class ExecuteAddGovernorReqEventResponse {
        public TransactionReceipt.Logs log;

        public String account;
    }

    public static class RequestRemoveGovernorEventResponse {
        public TransactionReceipt.Logs log;

        public String account;
    }

    public static class DeleteRemoveGovernorReqEventResponse {
        public TransactionReceipt.Logs log;

        public String account;
    }

    public static class ApproveRemoveGovernorReqEventResponse {
        public TransactionReceipt.Logs log;

        public String account;
    }

    public static class ExecuteRemoveGovernorReqEventResponse {
        public TransactionReceipt.Logs log;

        public String account;
    }

    public static class ApproveSingleEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger txType;
    }

    public static class DeleteSingleEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger txType;
    }

    public static class LogSetVoteWeightEventResponse {
        public TransactionReceipt.Logs log;

        public String voteWeight;

        public String contractAddress;
    }

    public static class LogRegisterEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger id;

        public BigInteger txType;

        public String requestAddress;

        public BigInteger threshold;

        public String contractAddress;
    }

    public static class LogUnregisterEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger id;

        public Boolean result;

        public String contractAddress;
    }

    public static class LogApproveEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger id;

        public String who;

        public Boolean b;

        public String contractAddress;
    }

    public static class LogUnapproveEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger id;

        public String who;

        public Boolean b;

        public String contractAddress;
    }

    public static class LogCanCallEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger id;

        public String requestAddress;

        public String contractAddress;
    }

    public static class TransferAdminAuthEventResponse {
        public TransactionReceipt.Logs log;

        public String oldAdmin;

        public String newAdmin;
    }
}
